2012-09-04 21 views
3

我已經在我的C#應用​​程序運行一個分析器(CLR探查器4.0)和應用程序已被終止之後,我留下了以下統計:探查令人震驚的統計數字

把手創建:34126個 把手銷燬:32844 手柄存活:1,282

我的印象是,當程序終止時,存活手柄應該接近零。我錯了嗎?什麼是我的應用程序沒有泄漏任何內存的其他指標?

+1

*「我已經運行了一個分析器(CLR Profiler 4.0)」* - 錯誤#1。那件事是一團糟,我不明白爲什麼它仍然可用。我建議使用更好的配置文件來追蹤性能問題。 RedGate有一個很好的.NET內存分析器和一個免費(全功能)試用版(我不以任何方式與RedGate相關)。 –

回答

2

這些是在關閉應用程序之前存活的句柄。這並不意味着您的應用程序正在泄漏內存,生活在此過程中的所有句柄,應用程序域和其他「受管理」資源都將被清理。如果您調用了任何本機dll或使用了其他「不安全」代碼塊(非託管資源),則必須確保在代碼中釋放這些資源(可以使用析構函數或IDisposible接口來執行此操作)。

我建議你從標題爲「世代垃圾回收」開始的「Under the hood of .NET Memory Management」中的第44頁開始閱讀。這應該能夠澄清這些結果。

相關問題