Process.Dispose() 实际上做了什么?

2024-01-07

In C# class Process继承自class Component实现IDisposable所以我可以打电话Dispose() on any Process目的。我真的必须这样做吗?我怎么知道我是否真的需要这样做?

假设我有以下代码:

 var allProcesses = System.Diagnostics.Process.GetProcesses();
 var processesNames = processes.Select( p => p.ProcessName );
 // output process names here

现在看起来我有一个数组Process物体和我有工艺try-finally遍历数组并Dispose()每个对象。这绝对是很多额外的代码。

那是什么Dispose() do for Process物体?我真的需要吗Dispose() every Process反对以及我如何决定是否需要这样做?


我真的需要吗Dispose() every Process反对以及我如何决定是否需要这样做?

是的,您应该处置它们。请注意文档中的此文本Process http://msdn.microsoft.com/en-us/library/system.diagnostics.process.aspx:

系统进程在系统上由其进程标识符唯一标识。与许多 Windows 资源一样,进程也通过其句柄进行标识,该句柄在计算机上可能不是唯一的。句柄是资源标识符的通用术语。即使进程已退出,操作系统也会保留进程句柄,该句柄可通过 Process 组件的 Handle 属性进行访问。因此,您可以获得进程的管理信息,例如 ExitCode(通常为零表示成功或非零错误代码)和 ExitTime。句柄是一种极其宝贵的资源,因此泄漏句柄比泄漏内存更具毒性。

所以如果你不这样做Dispose他们,你可能会泄漏句柄(直到它们被垃圾收集 - 但整个点Dispose是为了尽早清理资源)


另请注意,同一文档表明Process覆盖Dispose(bool)- 另一个线索表明它确实如此某物 when Dispose叫做。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Process.Dispose() 实际上做了什么? 的相关文章

随机推荐