How can I find out how many objects are c开发者_开发百科reated of a class in C#?
You'd have to put a static counter in that was incremented on construction:
public class Foo
{
private static long instanceCount;
public Foo()
{
// Increment in atomic and thread-safe manner
Interlocked.Increment(ref instanceCount);
}
}
A couple of notes:
- This doesn't count the number of currently in memory instances - that would involve having a finalizer to decrement the counter; I wouldn't recommend that
- This won't include instances created via some mechanisms like serialization which may bypass a constructor
- Obviously this only works if you can modify the class; you can't find out the number of instances of
System.String
created, for example - at least not without hooking into the debugging/profiling API
Why do you want this information, out of interest?
Is this a class that you've designed?
If so, add a counter to the class that is incremented in the constructor and decremented in Dispose.
Potentially you could make this a performance counter so you can track it in Performance Monitor.
精彩评论