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