3

我在我的 C# 应用程序上运行了一个分析器(CLR Profiler 4.0),在应用程序终止后,我得到了以下统计信息:

创建的句柄:34,126 销毁的句柄:32,844 幸存的句柄:1,282

我的印象是,当程序终止时,幸存的句柄应该接近于零。我错了吗?还有哪些其他指标表明我的应用程序没有泄漏任何内存?

4

1 回答 1

2

这些是关闭应用程序之前幸存的句柄。这并不意味着您的应用程序正在泄漏内存,进程中的所有句柄、应用程序域和其他“托管”资源都将被清理。如果您调用了任何本机 dll 或使用了其他“不安全”代码块(非托管资源),则必须确保在代码中释放这些资源(您可以使用析构函数或 IDisposible 接口来执行此操作)。

我建议您从标题“Generational Garage Collection”开始阅读“ Under the .NET Memory Management ”中的第 44 页。这应该在某种程度上澄清这些结果。

于 2012-09-04T22:38:20.587 回答