创建后如何处理流程?

时间:2014-10-14 21:04:21

标签: c# process idisposable process.start

引用an answer问题" How to open a URL in chrome incognito mode":

  

我写了这个并且成功了:

Process.Start(@"chrome.exe", "--incognito http://domain.com");

有人回复了this comment

  

您需要处置该对象,否则您将发生内存泄漏。

我通常用Process.Start创建许多进程,但我从来没有"处置"他们这是什么以及我该怎么做?

2 个答案:

答案 0 :(得分:2)

根据MSDN上的组件文章,这是正确的。您应该在使用后丢弃Process对象,释放任何非托管资源(应用程序不会关闭)。

  

组件应通过调用其Dispose方法显式释放资源,而无需通过对Finalize方法的隐式调用等待自动内存管理。放置Container时,Container中的所有组件也会被丢弃。

来自Process article

  

此类型实现IDisposable接口。使用完该类型后,应直接或间接处理。要直接处理类型,请在try / catch块中调用其Dispose方法。要间接处理它,请使用语言构造,例如使用(在C#中)或使用(在Visual Basic中)。有关更多信息,请参阅IDisposable接口主题中的“使用实现IDisposable的对象”部分。

Process来自Component,所以你应该处理它。它很容易:

Process myProc = Process.Start(@"chrome.exe", "--incognito http://domain.com");
myProc.Dispose();

甚至更容易

using (Process myProc = Process.Start(@"chrome.exe", "--incognito http://domain.com"))
{
   //Do whatever with the process
}

当退出块时,using块将释放对象。

答案 1 :(得分:0)

使用Process.Close();

var Pro = new Process();
Pro.Start(@"chrome.exe", "--incognito http://domain.com");
Pro.WaitForExit(); //optional
Pro.Close();