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

时间:2011-10-15 02:04:01

标签: c#

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

4 个答案:

答案 0 :(得分:2)

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

如果您想计算实时对象,您还需要在终结器中Interlocked.Decrement该字段(即C# destructor)。但请注意,添加终结器会使对象通过终结队列,从而进行垃圾收集less efficient

根据您定义“实时”对象的方式,您可能会有兴趣在Interlocked.Decrement实施中添加IDisposable.Dispose

答案 1 :(得分:1)

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

class MyClass
{

    static int instanceCount = 0;

    public MyClass()
    {
        instanceCount++;
    }

}

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

答案 2 :(得分:1)

你可以使用构造函数和析构函数来实现你想要的,但是你不应该真的需要知道你的类有多少实例存在。这听起来好像是以错误的方式解决问题。

class MyClass
{
    static int instances = 0;

    public MyClass()
    {
        instances++;
    }

    ~MyClass()
    {
        instances--;
    }
}

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

答案 3 :(得分:0)

这样的东西
class someclass
{
    private static int instanceCounter;

    public someclass() { someclass.instanceCounter++; }
}