C# 创建进程后如何处理它们?
引述问题“”: 我写了这篇文章,它成功了: 有人回答说: 您需要处理该对象,否则将发生内存泄漏 我通常使用C# 创建进程后如何处理它们?,c#,process,idisposable,process.start,C#,Process,Idisposable,Process.start,引述问题“”: 我写了这篇文章,它成功了: 有人回答说: 您需要处理该对象,否则将发生内存泄漏 我通常使用Process.Start创建许多进程,但我从不“处理”它们。这是什么?我该怎么做?使用Process.Close() 根据上的组件文章,这是正确的。您应该在使用后处置进程对象,释放所有非托管资源(应用程序将不会关闭) 组件应该通过调用Dispose方法显式释放资源,而无需等待通过隐式调用Finalize方法进行自动内存管理。当容器被处置时,容器内的所有组件也被处置 从过程中: 此类型实现I
Process.Start
创建许多进程,但我从不“处理”它们。这是什么?我该怎么做?使用Process.Close()代码>
根据上的组件文章,这是正确的。您应该在使用后处置进程
对象,释放所有非托管资源(应用程序将不会关闭)
组件应该通过调用Dispose方法显式释放资源,而无需等待通过隐式调用Finalize方法进行自动内存管理。当容器被处置时,容器内的所有组件也被处置
从过程中
:
此类型实现IDisposable接口。使用完该类型后,应直接或间接处置它。要直接处理该类型,请在try/catch块中调用其dispose方法。要间接地处理它,请使用语言构造,例如使用(在C#中)或使用(在Visual Basic中)。有关更多信息,请参阅IDisposable接口主题中的“使用实现IDisposable的对象”部分
进程
派生自组件
,因此您应该对其进行处理。这很容易:
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
}
当块退出时,使用块将处理对象。请尝试.Close()关闭应用程序。相关:。您的问题在这里得到了回答。@Mohamadshiralizadeh.Close()
不会关闭应用程序-它只会释放与之相关的资源。您的右键@Michael…当您在块退出时说dispose对象。dispose这个词是否意味着进程将终止?所以,如果我加载chrome+网站,然后处理它,chrome现在关闭了吗?@ModS否,你只是在释放进程的未管理句柄。应用程序将正常运行。@我不确定您指的是什么信息。Close
上的文章说Dispose
调用它。它们仍然是不同的方法调用。我总是走Dispose
路线,因为它可以做的不仅仅是在这里谨慎地调用Close
使用WaitForExit
;该线程将一直阻塞,直到应用程序退出或在另一个线程上调用Close
/Dispose
。如果我有一个方法反复执行此操作(例如每次单击chrome时,它都会创建chrome的进程),全局声明Pro以避免使用新关键字是否安全?而不是一次又一次地重新分配它,而不是一次又一次地创建它?@ModS这将保证在GC到来并完成孤立引用之前发生泄漏。在重新分配之前,您应该调用Dispose
(或Close
)理论上:全局声明进程进程进程。使用“将开始信息分配给进程”。处置过程。根据需要重新使用?既然我正在处理所有的用途,这个还会有漏洞吗?@ModS那个版本就可以了。更简单的方法是使用和块(创建变量很便宜!),但您所拥有的将起作用。
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
}