How can I find out how many objects are created of a class in C#?
How can I find out how many objects are created of a class
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?
Agreed, it's useful to decrement within the destructor for finalization.
~Foo() { Interlocked.Decrement(ref instanceCount); }
@JonSkeet, why wouldn't you recommend that (out of interest)? –
Uncle @defines: Because that's counting something different - that's counting how many objects haven't been finalized. The OP was asking for the number of objects that had been created. If I create 100 and they're all finalized/GC'd, I've still created 100 objects. –
Cockscomb
True. In my usage I wanted to look at current objects in memory which haven't been GC'd, while debugging. Based on OP's wording that would be different, you're right. But your answer seems to say you wouldn't recommend counting currently in memory instances; I thought you were cautioning against it and wondered why. –
Uncle
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.
© 2022 - 2024 — McMap. All rights reserved.
Interlocked.Decrement(ref instanceCount)
in destructor of the object? TheninstanceCount
will give an estimate of currently living object instances. – Tret