计算类的实例

Tom*_*mas 12 .net c# class object

可能重复:
如何在C#中找出创建了一个类的对象数量

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

例如

public class MyClass { }

...

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

count = GetActiveInstances(typeof(MyClass))
Run Code Online (Sandbox Code Playgroud)

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

Dor*_*hen 22

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

class MyClass
{
    static int counter = 0;

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

    ~MyClass()
    {
        Interlocked.Decrement(ref counter);
    }
}
Run Code Online (Sandbox Code Playgroud)

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

  • 不,永远不要锁定终结者.您不希望终结器线程因任何原因而被阻塞.如果你必须从终结者那里做这样的事情,请使用`Interlocked.Increment`和`Interlocked.Decrement`. (7认同)
  • +1使用`lock` (2认同)

Hab*_*are 6

这个 :

public class MyClass
{
    private static int instances = 0;

    public MyClass()
    {
        instances++;
    }

    ~MyClass()
    {
        instances--;
    }


    public static int GetActiveInstances()
    {
        return instances;
    }

}
Run Code Online (Sandbox Code Playgroud)

使用 :

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

     int count = MyClass.GetActiveInstances();
Run Code Online (Sandbox Code Playgroud)