真的很简单的问题,我似乎无法找到答案。
如何计算特定类中使用了多少对象?我正在考虑使用列表并将所有对象添加到列表中,然后计算列表...如果我要这样做,我将如何访问该列表?
如果您对创建了多少个类的实例感兴趣,可以在其构造函数中增加一个静态计数器。
public class C
{
private static int numInstances;
public C() {
++numInstances;
// and whatever else is needed
}
}
请注意,此代码不是线程安全的:您需要围绕对 C.numInstances 的访问添加线程安全保护
基本上有两种方法可以做到这一点。
在您的类中保留一个静态计数,该计数在构造函数上递增并在析构函数上递减(并且Dispose
,如果您使用IDisposable
)。这样做的缺点是您将延迟对象上的垃圾收集,因为它们将进入终结队列(如果不使用Dispose
)。
保留对您的实例的弱引用的静态列表。添加this
到构造函数中的列表。在枚举列表或计算其元素时,检查弱引用是否仍然存在以真正计算该对象。此外,此时您可能希望压缩列表,即删除其失效的弱引用。您可以看一下ConditionalWeakTable<TKey, TValue>
,但不幸的是,它没有为您提供简单的计数。
此外,如果多个线程可以创建您的对象,请考虑同步对这些元素的访问。