2010-09-24 96 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方法可以为您提供所需的信息。我不知道这是你想要的,但它是一个起点。