C# 如何使用静态字段跟踪从特定类创建的对象数量
我正在使用c#并且有一个问题,如何使用静态字段来计算类中的实例数,请计算内存,提前感谢。类似于C# 如何使用静态字段跟踪从特定类创建的对象数量,c#,C#,我正在使用c#并且有一个问题,如何使用静态字段来计算类中的实例数,请计算内存,提前感谢。类似于 class someclass { private static int instanceCounter; public someclass() { someclass.instanceCounter++; } } 只需向类的构造函数添加一个计数器 class MyClass { static int instanceCount = 0; public MyCl
class someclass
{
private static int instanceCounter;
public someclass() { someclass.instanceCounter++; }
}
只需向类的构造函数添加一个计数器
class MyClass
{
static int instanceCount = 0;
public MyClass()
{
instanceCount++;
}
}
每次创建类的实例时,构造函数都会运行。静态变量由所创建类的所有实例共享。您可以使用构造函数和析构函数来实现所需的功能,但实际上不需要知道一次存在多少个类实例。听起来你在用错误的方式处理问题
class MyClass
{
static int instances = 0;
public MyClass()
{
instances++;
}
~MyClass()
{
instances--;
}
}
请注意,不会立即调用类的析构函数。垃圾收集器决定何时收集类的实例,从而决定何时调用析构函数。若要简单地计算构造的数量,请声明一个静态字段,并使用
联锁。在中递增
以线程安全的方式递增静态字段
如果要计算活动对象的数量,还需要在终结器(即)中对该字段进行联锁。减量
。但是,请注意,添加终结器将使对象通过终结队列,从而进行垃圾收集
根据您定义“活动”对象的方式,您可能有兴趣在
IDisposable.Dispose
实现中添加Interlocated.Decrement
。嗯,您在.Net中并没有析构函数的概念,所以我无法100%确定如何跟踪它,没有一个明确的COM风格的AddRef/RemoveRef。你似乎不明白我的意思,我想知道这是如何在内存中处理的,但感谢你的注意:)虽然OP的问题形式不好,但它们什么时候被销毁了呢?可能是因为“请根据内存计算”不清楚。此外,有正确的拼写,大写和标点符号将有助于。。。