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(使用前将#替换为@)