2017-08-14 58 views
-1

我在一些的WinForms代碼的工作,現在,我所遇到的線條像這幾次:如果對象實際上不會用於代碼中,我應該使用using語句/ dispose嗎?

... 
System.Diagnostics.Process.Start(someFileName); 
... 

...剛剛揭開序幕的一些過程中的客戶機上,而完全忘記了這件事。 Process.Start(someFileName)返回一個Process類型的對象,它實現了IDisposable,但代碼沒有對該對象做任何事情,因爲整個想法只是觸發該流程並忘記它。

在這種情況下,Process對象是否應該丟棄,如果我們沒有把它放在內存中呢?喜歡的東西:

using (System.Diagnostics.Process.Start(someFileName) { } 

var process = System.Diagnostics.Process.Start(someFileName); 
process.Dispose(); 
+0

'System.Diagnostics.Process.Start(someFileName).Close();' –

+0

如果實現IDisposable然後清除它,使用一個(){}是執行此操作的規範方法。 –

+0

簡短的回答是:你應該處置。不管你使用哪兩種代碼變體(假設你不把代碼放入使用塊) –

回答

0

Process對象持有非託管資源(S)HProcess手柄)

https://referencesource.microsoft.com/#System/services/monitoring/system/diagnosticts/Process.cs,f8b2e604d6f1fe04

public class Process : Component { 
    // 
    // FIELDS 
    // 

    bool haveProcessId; 
    int processId; 
    bool haveProcessHandle; 
    SafeProcessHandle m_processHandle; // <- This should be disposed 
    bool isRemoteMachine; 
    string machineName; 
    ProcessInfo processInfo; 
    Int32 m_processAccess; 
... 

並由此應該配置爲。使用局部變量(var process = ...)看起來在上下文超調,這就是爲什麼我建議

System.Diagnostics.Process.Start(someFileName).Close(); 
相關問題