2011-06-02 24 views
3

有沒有人知道自動找到任何變量的方法,其中類型實現了IDisposable,但使用的構造沒有被使用?IDisposable - 使用構造的自動檢查

即。一種檢查可能未發佈的非託管資源的方法?

另外,是否有可能看到正在運行的應用程序持有的資源的數量和類型?

+0

代碼分析功能可以捕捉這一點。的 – 2011-06-02 11:33:52

+0

可能重複[檢測「泄露」了IDisposable對象(http://stackoverflow.com/questions/4737056/detecting-leaked-idisposable-objects) – 2011-06-02 11:34:34

+0

如果我有VS高級版或旗艦!哦,我用cygwin + grep做了它(因爲我知道可能違法者的類型)! – 2011-06-02 22:48:22

回答

4

有這個代碼分析規則:

http://msdn.microsoft.com/en-us/library/ms182289%28VS.100%29.aspx

這可以從2010年VS運行Premium或Ultimate或單獨使用的FxCop:

http://www.microsoft.com/downloads/en/details.aspx?FamilyID=917023f6-d5b7-41bb-bbc0-411a7d66cf3c

另一件事我已經看到完成的是在構建一個對象IDisposable時捕獲堆棧跟蹤,然後如果命中了finalize(意味着沒有調用Dispose()),則記錄錯誤構建的堆棧跟蹤。這很貴,所以你可能只想在開發過程中使用它,或者在你的應用程序第二次遇到這個問題時纔開始收集堆棧跟蹤信息(如果你碰到過一次,你很可能會在其中多次遇到它一個應用程序執行)。此方法適用於更長壽的IDisposable實例(不僅僅是局部變量)。當然,它也只適用於自定義的IDisposable對象,因爲它需要構造函數/ dispose/finalizer中的自定義代碼。

1

VS 2010代碼分析儀和FxCop? (不知道)可靠性的規則將做了很好的工作在檢測是否存在在實施IDisposable對象是走出去的範圍,而不調用Dispsoe()的analyized存在代碼執行路徑(這是過於心急,將在許多ocasions檢測假陽性)。

當然這不會強制執行using結構的正確實施try-finally塊將通過測試(均是明顯的引擎蓋下相等的,所以我不知道如果多數民衆贊成的問題)。

編輯:FX警察不支持此警告。它自VS 2005代碼分析器以來就可以使用。 Visual Studio的高級版或旗艦的