计算类的实例

可能重复:
我怎样才能知道在C#中创建了多少个对象?

是否有可能获得所选类的活动(已创建但尚未销毁)的实例数?

例如

public class MyClass { } c1 = new MyClass(); c2 = new MyClass(); count = GetActiveInstances(typeof(MyClass)) 

应该返回2.如果GC破坏这些类中的任何一个,则为1或0。

您可以在程序中保存全局静态计数器。
这是一个简单的线程安全解决方案:

 class MyClass { static int counter = 0; public MyClass() { Interlocked.Increment(ref counter); } ~MyClass() { Interlocked.Decrement(ref counter); } } 

还要看一下下面这个类似的问题 – 在类方法中计算类类型的对象数

这个 :

 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(); 

只有在构造函数(increment)和终结符(递减)中实现计数机制。 但即使这样也不能说明实际上没有活动的实例(没有人提及它们)但尚未收集。

此外,在课程中添加终结者 – 无论多么微不足道 – 都会对绩效产生不利影响 ,这是反对这样做的一个论据。

 public class MyClass{ static int count; static object _lock = new object(); public MyClass(){ lock(_lock){ count++; } } ~MyClass(){ lock(_lock){ count--; } } } 

我不知道内置机制,但你总是可以在构造函数中包含一个私有静态变量。

 public class MyClass { static int instances = 0; public MyClass(){ instances++; } ~MyClass(){ instances--; } } 

没试过但应该工作。

试试这个:

 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); 

这样的事情是不可能的,但你可以这样做

注意: classinstance也可以是int值,只是为了维持计数。

 class mytype { public static List classinstance = new List(); public mytype() { classinstance.Add(this); } public removeclass(mytype t) { classinstance.Remove(t); t=null; } public int ActiveCount { get { classinstance.Count; } } } 
  public class MyClass { public static int countinstance =0; MyClass(){ countinstance ++;} ~ MyClass() {countinstance --; } } 

通过countinstance简单易用的实例活动

您可以通过为类中的count创建一个静态变量并在constructor递增它并在destructor constructor递减来尝试它。这可以帮助您。