计算从一个类中使用的对象数量

时间:2012-04-17 00:18:56

标签: c#

简单的问题,我似乎无法找到答案。

如何计算特定类中使用的对象数量?我正在考虑使用列表并将所有对象添加到列表中然后计算列表...如果我这样做,我将如何访问该列表?

2 个答案:

答案 0 :(得分:1)

如果您对创建了多少个类的实例感兴趣,可以在其构造函数中增加一个静态计数器。

public class C
{
  private static int numInstances;
  public C() {
    ++numInstances;
    // and whatever else is needed
  }
}

请注意,此代码不是线程安全的:您需要围绕对C.numInstances的访问添加线程安全保护

答案 1 :(得分:1)

基本上有两种方法可以做到这一点。

  1. 在类中保留一个静态计数,该计数在构造函数上递增,在析构函数上递减(如果使用Dispose,则递归IDisposable)。这样做的缺点是你会延迟对象的垃圾收集,因为它们会进入终结队列(如果没有使用Dispose)。

  2. 为您的实例保留弱引用的静态列表。将this添加到构造函数的列表中。枚举列表或计算其元素时,检查弱引用是否仍然存活以真正计算该对象。此外,您可能希望此时压缩列表,即删除其无效的弱引用。您可以查看ConditionalWeakTable<TKey, TValue>,但不幸的是它并没有为您提供简单的计数。

  3. 另外,如果多个线程可以创建对象,请考虑同步对这些元素的访问。