Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/297.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 创建进程后如何处理它们?_C#_Process_Idisposable_Process.start - Fatal编程技术网

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
}