我在我的 C# 应用程序上运行了一个探查器 (CLR Profiler 4.0),在应用程序终止后,我得到了以下统计信息:
创建的句柄:34,126
销毁的 handle :32,844
处理存活:1,282
我的印象是,当程序终止时,句柄存活率应该接近于零。我错了吗?我的应用程序没有泄漏任何内存的其他一些指标是什么?
最佳答案
这些是关闭应用程序之前幸存的句柄。这并不意味着您的应用程序正在泄漏内存,进程中的所有句柄、应用程序域和其他“托管”资源都将被清除。如果您调用了任何 native dll 或使用其他“不安全”代码块(非托管资源),则必须确保在代码中释放这些资源(您可以使用析构函数或 IDisposible 接口(interface)来执行此操作)。
我建议您从“Under the hood of .NET Memory Management ”中的第 44 页开始,从标题“Generational Garbage Collection”开始阅读。这应该在一定程度上澄清这些结果。
关于c# - Profiler 报警统计,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12256127/