计算对象上的GC清理次数

时间:2010-05-03 14:38:41

标签: c# .net garbage-collection

如何在应用程序的生命周期内保留特定类(类型?)的对象的处理次数。想象一下,我有一个A类,现在,我想要计算GC收集A的对象的次数。

我希望我说的是正确的,因为我今天在接受采访时被问到这个问题,而我给出的答案并不能让面试官满意。这就是我想他要问的问题。

我所说的是,可以在A类中保留一个名为 count 的静态字段,并在该对象的 Finalize()调用中增加它。

他期待的答案是一种称为静态块的东西。我在.NET / C#中从未听说过这个。有人可以解释一下这个静态块是什么吗?

3 个答案:

答案 0 :(得分:1)

使用memprofilerRedgate AntsdotTraceCLR Profiler(需要.NET 3.5 apparently的管理员权限)或Visual团队版等工具工作室。

答案 1 :(得分:0)

也许他指的是这个类的静态构造函数?

public class Foo {

   public static Foo() { /* gets called once before first operator new */ }

}

答案 2 :(得分:0)

静态块实际上是C#中Static Constructor的另一个名称。在创建第一个实例之前,会自动调用它来初始化类。我无法看到这将如何帮助您跟踪课程的处理次数。我能想到的唯一方法是让你的班级实现IDisposable,有一个名为disposeCount的静态字段,并在每次调用Dispose时递增它,或者确定正确地说Finalize方法。你的答案绝对没有错,如果你接受第二次面试,你应该向他们指出:)