簡體   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