簡體   English   中英

如何找到實現IDisposable的所有類?

[英]How to find all Classes implementing IDisposable?

我正在開發一個大型項目,我的任務之一是消除可能的內存泄漏。 在我的代碼中,我注意到幾個IDisposable項目沒有被處理,並已修復。 in my project that implement IDisposable? 但是,這引出了一個更基本的問題,如何找到我的項目中 IDisposable的所有類? (不是自定義創建的類,而是已使用的標准庫類)。
我已經找到了一個實現IDisposable的不太明顯的類(DataTable實現了MarshalByValueComponent,它繼承了IDisposable)。 現在,我通過使用MSDN手動檢查任何可疑的類,但是我沒有某種方法可以自動執行此過程?

Reflector可以顯示哪些類實現IDisposable :只需在Reflector中找到IDisposable接口,然后展開“派生類型”節點

代碼中的另一個選項是掃描所有已加載的程序集以查找實現IDisposable類型:

var disposableTypes =
    from a in AppDomain.CurrentDomain.GetAssemblies()
    from t in a.GetTypes()
    where typeof(IDisposable).IsAssignableFrom(t)
    select t;

使用FxCop測試您的項目。 它可以捕獲未放置IDisposable對象的所有位置。 您可能需要做一些工作來禁用所有不相關的FxCop規則,只留下與IDisposable相關的規則。

例如,這是FxCop IDisposable規則之一: http//msdn.microsoft.com/en-us/library/ms182289%28VS.100%29.aspx

注意:您需要找到自己的.NET和第三方IDisposable對象,這些對象未正確處理。

您可以使用NDepend來分析項目並查找實現IDisposable的所有類型。

這是結果的cql查詢

SELECT TYPES WHERE Implement "System.IDisposable"

我認為類似下面的代碼可能會起作用。 如果從外部工具運行,則必須調整以加載正確的組件。

Assembly asm = Assembly.GetExecutingAssembly();
foreach (Type type in asm.GetTypes())
{
 if(type.GetInterface(typeof(IDisposable).FullName)  != null)
 {
  // Store the list somewhere
 }
}

試試這個LINQ查詢:

var allIdisposibles = from Type t in Assembly.GetExecutingAssembly().GetTypes()
                      where t.GetInterface(typeof(IDisposable).FullName) != null && t.IsClass
                      select t;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM