我在我的C#应用程序上运行了一个分析器(CLR Profiler 4.0),在应用程序终止后,我留下了以下统计信息:
创造的手柄:34,126 处理被摧毁:32,844 处理生存:1,282
我的印象是,当程序终止时,处理幸存的应该接近零。我错了吗?我的应用程序没有泄漏任何内存有哪些其他指标?
答案 0 :(得分:2)
这些是在关闭应用程序之前幸存的句柄。这并不意味着您的应用程序正在泄漏内存,所有句柄,应用程序域以及生成在此过程中的其他“托管”资源都将被清除。如果您调用了任何本机dll或使用了其他“不安全”代码块(非托管资源),则必须确保在代码中释放这些资源(可以使用析构函数或IDisposible接口来执行此操作)。
我建议你从“Under the hood of .NET Memory Management”的第44页开始阅读标题“Generational garbage collection”。这应该有点清除这些结果。