可能重复:
how can i find out how many objects are created of a class in C#
是否可以获取所选类的活动(已创建但尚未销毁)的实例数?
例如
public class MyClass
{
}
c1 = new MyClass();
c2 = new MyClass();
count = GetActiveInstances(typeof(MyClass))
应该返回2.如果GC破坏这些类中的任何一个,则为1或0。
答案 0 :(得分:21)
您可以在程序中保存全局静态计数器 这是一个简单的线程安全解决方案:
class MyClass
{
static int counter = 0;
public MyClass()
{
Interlocked.Increment(ref counter);
}
~MyClass()
{
Interlocked.Decrement(ref counter);
}
}
还要看一下以下类似的问题 - Count number of objects of class type within class method
答案 1 :(得分:6)
这个:
public class MyClass
{
private static int instances = 0;
public MyClass()
{
instances++;
}
~MyClass()
{
instances--;
}
public static int GetActiveInstances()
{
return instances;
}
}
使用:
MyClass c1 = new MyClass();
MyClass c2 = new MyClass();
int count = MyClass.GetActiveInstances();
答案 2 :(得分:4)
仅当您在构造函数(increment)和终结器(减量)中实现计数机制时。但即使这样也无法解释真正无效的情况(没有人提及它们),但尚未收集。
此外,为一个类添加一个终结器 - 无论多么微不足道 - will adversely affect performance,这是反对这样做的论据。
答案 3 :(得分:2)
public class MyClass{
static int count;
static object _lock = new object();
public MyClass(){
lock(_lock){
count++;
}
}
~MyClass(){
lock(_lock){
count--;
}
}
}
答案 4 :(得分:1)
我不知道内置机制,但你总是可以在构造函数中增加一个私有静态变量。
public class MyClass
{
static int instances = 0;
public MyClass(){
instances++;
}
~MyClass(){
instances--;
}
}
没试过但应该工作。
答案 5 :(得分:1)
试试这个:
public class MyClass
{
public static int activeCount = 0;
public MyClass()
{
activeCount++;
}
~MyClass()
{
activeCount--;
}
}
//In the main
MyClass testClass1 = new MyClass();
MyClass testClass2 = new MyClass();
Console.WriteLine(MyClass.activeCount);
答案 6 :(得分:1)
这样的事情是不可能的,但你可以做像
这样的事情不:类实例也可以是int值,只是为了维持计数。
class mytype
{
public static List<mytype> classinstance = new List<mytype>();
public mytype()
{
classinstance.Add(this);
}
public removeclass(mytype t)
{
classinstance.Remove(t);
t=null;
}
public int ActiveCount
{
get { classinstance.Count; }
}
}
答案 7 :(得分:1)
public class MyClass
{
public static int countinstance =0;
MyClass(){ countinstance ++;}
~ MyClass() {countinstance --; }
}
通过countinstance简单轻松地获取实例活动
答案 8 :(得分:0)
你可以通过为类中的count创建一个静态变量并在constructor
中递增并在destructor
递减来尝试它。这可以帮助你。