如何使用静态字段来跟踪从特定类创建的对象的数量

本文关键字:创建 对象 静态 何使用 字段 跟踪 | 更新日期: 2023-09-27 18:11:14

我正在使用c#,并且有一个问题,如何使用静态字段来计算类中的实例数量,请在内存方面进行校准,提前感谢。

如何使用静态字段来跟踪从特定类创建的对象的数量

要简单地计算构造的数量,声明一个静态字段,并在实例构造函数中使用Interlocked.Increment以线程安全的方式增加静态字段。

如果你想计数活动对象,你还需要在你的终结器(即c#析构函数)中Interlocked.Decrement该字段。但是,请注意,添加终结器将使对象经过终结队列,从而降低垃圾收集的效率。

根据您如何定义"活动"对象,您可能对在IDisposable.Dispose实现中添加Interlocked.Decrement感兴趣。

只需在类的构造函数中添加一个计数器

class MyClass
{
    static int instanceCount = 0;
    public MyClass()
    {
        instanceCount++;
    }
}

构造函数在每次创建类的实例时运行。静态变量由创建的类的所有实例共享。

您可以使用构造函数和析构函数来实现您想要的效果,但是您不应该真的需要知道您的类在任何时候存在多少个实例。听起来你好像在用错误的方法解决问题。

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

注意,类的析构函数不会立即被调用。垃圾收集器决定何时收集类的实例,因此何时调用析构函数。

类似

class someclass
{
    private static int instanceCounter;
    public someclass() { someclass.instanceCounter++; }
}