2010-01-07 37 views
0

.NET開發人員在託管應用程序中尋找(並避免)非託管泄漏的最佳方式是什麼?用於查找/避免託管代碼中的非託管泄漏的技術

似乎有很多優秀的資源用於跟蹤託管泄漏,但我在追蹤託管應用程序中的非託管泄漏方面沒有發現太多。

This question是相關的,但從純粹非託管的角度提出問題,許多答案都假設您可以訪問非託管代碼,並且沒有提到任何.NET特定的陷阱或技術。

這裏有一些(很基本的)事情我已經嘗試:

  • DebugDiag。它看起來很有希望,它可能適用於你,但它恰好會使我的特定應用程序崩潰。
  • Rational PurifyPlus。可悲的是,也崩潰了我的應用程序。
  • AQTime(在@Reed和@Caelum的推薦下)。這個程序看起來很棒,但就像@Caelum提到的問題的海報一樣,AQTime也會崩潰我的應用程序。
  • 暫時刪除創建我知道使用非託管內存的對象的代碼。
  • 確保應用程序的配置實現IDisposable

所有對象我要指出,我是能夠成功地剖面中的另一管理應用程序使用上述分析器(這是泄漏非託管內存)。如果你有非託管泄漏,請給他們一個嘗試。

回答

0

我認爲你已經擊中了大部分選項,我發現的最好方法就是從一開始就考慮如何使用和管理非託管資源。

正如您所說的,確保良好的使用IDisposable和思考終結者以及它們如何影響您的應用程序是我發現避免泄漏的最佳方式:)。

DebugDiag是Microsoft性能團隊在尋找應用程序問題時將使用的內容,我相信爲其編譯內存轉儲文件甚至可以集成到Win 7和Visual Studio 2010中的任務管理器中。

使用DebugDiag時,請務必查看SOS擴展。也許更好的問題是問爲什麼DebugDiag和PurifyPlus崩潰爲您的特定應用程序?由於這看起來會導致問題,無論你嘗試什麼......

+0

您是對的:找到一種使用這些分析器的方法是一個非常好的主意。即使我的完整應用程序在通過配置文件運行時崩潰,我已經成功分析了一個小的漏洞應用程序。 – 2010-01-09 00:00:04

0

我個人使用的代碼分析器支持託管和非託管(以及混合模式)代碼:AQTime。它將處理來自託管代碼和非託管代碼的跟蹤內存,因此它使混合項目中的跟蹤內存更簡單