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

Har*_*sha 8 c# garbage-collection process

以下是贯穿所有进程的代码段,当它找到正确的进程时,代码会发送消息.我的问题是'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);
            }               
        }
Run Code Online (Sandbox Code Playgroud)

哈尔莎,提前谢谢

Hen*_*rik 5

为了确保尽快释放所有资源,请在不再需要时调用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;
}
Run Code Online (Sandbox Code Playgroud)


Phi*_*Gan 4

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

using (var disposableObject = new DisposableType())
{
    // do work with disposableObject
}
Run Code Online (Sandbox Code Playgroud)

  • @Massif:Dipsosing Process对象不会关闭进程,只会关闭你的进程.丢失处理句柄会浪费非托管资源,直到GC收集您的Process对象. (2认同)