2010-09-24 88 views
0

我有興趣瞭解有多少對象被垃圾回收器回收後,我運行下面的代碼。查找C#垃圾回收器回收了多少個對象

if (ObjectsOutstanding > GCThreshold) { 
    System.GC.Collect(); 
} 
+2

這是很少建議調用GC.Collect – 2010-09-24 09:32:03

+0

也許你可以覆蓋finalize方法,把一個計數器每次調用這個方法註冊,但我不知道,如果你能做到這一點。 – 2010-09-24 09:36:19

+0

各種各樣的對象或者你在審覈自己的對象? – 2010-09-24 09:53:39

回答

2

爲您自己的自定義類型執行此操作的一種簡單方法是在其終結器中增加和跟蹤某個計數器。

例如

public class MyCustomType 
{ 
    public static int NumFinalizersCalled; 

    ~MyCustomType() 
    { 
     Interlocked.Increment(ref NumFinalizersCalled); 
    } 
} 
+0

@ Henk Holterman:'GC.WaitForPendingFinalizers'會解決這個問題,不是嗎? – Ani 2010-09-24 13:19:46

+1

我會在那裏拋出一個'#if DEBUG'預編譯器指令,這樣它就不會成爲發佈版本。 – 2010-09-24 13:37:02

0

在Visual Studio調試器中,您可以在即時窗口中使用SOS library。有幾種GC方法可以爲您提供所需的信息。我不知道這是你想要的,但它是一個起點。