算该类的实例[复制](Count instances of the class [duplicate

2019-06-27 20:16发布

可能重复:
我怎么能找到多少个对象在C#中创建一个类的

是否有可能得到它是积极的(创建,尚未销毁)选定类实例的数量?

例如

public class MyClass
{
}

    c1 = new MyClass();
    c2 = new MyClass();

    count = GetActiveInstances(typeof(MyClass))

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

Answer 1:

你可以拥有你的程序全局静态计数器。
这是一个简单的线程安全的解决方案:

class MyClass
{
    static int counter = 0;

    public MyClass()
    {
        Interlocked.Increment(ref counter);
    }

    ~MyClass()
    {
        Interlocked.Decrement(ref counter);
    }
}

也看看下面的类似的问题- 计数类方法中的类的对象的数



Answer 2:

这个 :

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


Answer 3:

只有当你实现构造函数(增量)和终结(递减)内的计数机制。 但即使这样,也不能说明这是真正不活动的情况下(没有人有任何引用它们),但尚未领取的呢。

此外,添加一个终结的一类-无论多么微不足道的- 将性能产生不利影响 ,这是反对这样做的理由。



Answer 4:

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

}


Answer 5:

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

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

没有尝试过,但应该工作。



Answer 6:

试试这个:

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


Answer 7:

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

注:Children子可也仅仅能维持数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; }
  }
}


Answer 8:

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

简单和容易获得实例由countinstance活跃



Answer 9:

您可以通过一个静态变量在类中的计数尝试一下,增加它的constructor和递减在destructor 。可能这可以帮助你。



文章来源: Count instances of the class [duplicate]