sha*_*oth 35 .net c# idisposable
在C#中class Process
继承了class Component
该实现IDisposable
,因此我可以调用Dispose()
任何Process
对象.我真的需要吗?我怎么知道我是否真的需要?
假设我有以下代码:
var allProcesses = System.Diagnostics.Process.GetProcesses();
var processesNames = processes.Select( p => p.ProcessName );
// output process names here
Run Code Online (Sandbox Code Playgroud)
现在看起来我有一个Process
对象数组,我已经设计了try-finally
遍历数组和Dispose()
每个对象.这肯定是很多额外的代码.
这Dispose()
对Process
物体有什么作用?我是否真的需要Dispose()
每个Process
对象,我如何决定是否需要这样做?
Dam*_*ver 35
我是否真的需要
Dispose()
每个Process
对象,我如何决定是否需要这样做?
是的,你应该处理它们.请注意文档中的以下内容Process
:
系统进程通过其进程标识符在系统上唯一标识.与许多Windows资源一样,进程也由其句柄标识,该句柄在计算机上可能不是唯一的.句柄是资源标识符的通用术语.操作系统持久保存进程句柄,即使进程已退出,也可通过Process组件的Handle属性访问该句柄.因此,您可以获取进程的管理信息,例如ExitCode(通常为成功为零或非零错误代码)和ExitTime.手柄是非常有价值的资源,因此泄漏的手柄比泄漏记忆更具毒性.
因此,如果你不这样做Dispose
,你可能会泄漏手柄(直到他们被垃圾收集 - 但重点Dispose
是要尽早清理资源)
另请注意,相同的文档表明Process
覆盖Dispose(bool)
- 另一个线索,它实际上在调用时执行某些操作Dispose
.
归档时间: |
|
查看次数: |
15651 次 |
最近记录: |