1

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

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

4

2 回答 2

1

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

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

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

于 2012-04-17T00:27:34.543 回答
1

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

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

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

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

于 2012-04-17T00:31:27.510 回答