繁体   English   中英

我是否需要担心foreach循环中的Process

[英]Do I need to worry about Process in foreach loop

以下是贯穿所有进程的代码段,当它找到正确的进程时,代码会发送消息。 我的问题是'proc'发生了什么,如何处理这个过程。

//get all other (possible) running instances
        Process[] processes = Process.GetProcesses();            
        foreach (Process proc in processes)
        {
            if (proc.ProcessName.ToLower() == ProcessName.ToLower())
            {
                SendMessage(proc.MainWindowHandle, (uint)Message, IntPtr.Zero, IntPtr.Zero);
            }               
        }

哈尔莎,提前谢谢

为了确保尽快释放所有资源,请在不再需要时调用Dispose。

//get all other (possible) running instances
Process[] processes = Process.GetProcesses();
try
{
    foreach (Process proc in processes)
    {
    // use proc
    }
}
finally
{
    foreach (Process proc in processes)
        proc.Dispose();
    processes = null;
}

一般而言, 除非对象实现IDisposable接口, 否则您不必担心处置或取消分配对象。 如果是这样,您应该在完成时手动调用Dispose()方法,或者using语句自动调用它:

using (var disposableObject = new DisposableType())
{
    // do work with disposableObject
}

如果你循环找到你赢得的过程,那么你可以尝试类似的东西:

Process.GetCurrentProcess();

在任何情况下,我会将其更改为:

    foreach (Process proc in Process.GetProcesses())
    {
        if (proc.ProcessName.ToLower() == ProcessName.ToLower())
        {
            SendMessage(proc.MainWindowHandle, (uint)Message, IntPtr.Zero, IntPtr.Zero);
        }               
    }

这样,没有变量会引用“GetProcesses”,GC最终会处理它。

变量proc是foreach循环的本地变量,因此一旦循环完成,它将自动被垃圾收集。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM