计算类的实例

时间:2012-09-05 07:37:24

标签: c# .net class object

  

可能重复:
  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。

9 个答案:

答案 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递减来尝试它。这可以帮助你。