Um es vollständig innerhalb der Anwendung durchzuführen, könnten Sie einen Instanzzähler verwenden, aber er müsste explizit in jedem einzelnen Klasse codiert und verwaltet werden - soweit ich weiß gibt es keine Lösung, die es ermöglicht, das Framework aus dem ausführenden Code abzufragen, um zu sehen, wie viele Instanzen leben.
Was Sie eigentlich suchen, gehört wirklich in den Bereich eines Profilers. Sie können einen kaufen oder Ihren eigenen erstellen, aber dazu muss Ihre Anwendung als Kindprozess des Profilers ausgeführt werden. Es ist übrigens keine einfache Aufgabe, Ihren eigenen zu entwickeln.
Wenn Sie den Instanzzähler in Betracht ziehen möchten, müsste es so etwas sein:
public class MyClass : IDisposable
public MyClass()
{
++ClassInstances;
}
public void Dispose()
{
--ClassInstances;
}
private static new object _ClassInstancesLock;
private static int _ClassInstances;
private static int ClassInstances
{
get
{
lock (_ClassInstancesLock)
{
return _ClassInstances
}
}
}
Dies ist nur ein sehr grobes Beispiel, ohne Tests für die Kompilierung; 0%ige Garantie für Thread-Sicherheit (entscheidend für diese Art der Herangehensweise) und es lässt die Tür weit offen, dass Dispose aufgerufen wird, der Instanzzähler abnimmt, aber das Objekt nicht ordnungsgemäß vom GC entfernt wird. Um dieses Bündel von Freude zu diagnostizieren, benötigen Sie, wie Sie es vermutet haben, einen professionellen Profiler - oder zumindest windbg.
Bearbeiten: Ich habe gerade die allerletzte Zeile Ihrer Frage bemerkt und musste sagen, dass mein obiger Ansatz, so schlampig und fehleranfällig er auch sein mag, Sie fast garantiert über die wahre Anzahl von Instanzen täuschen wird, wenn Sie einen Leck erleben. Das beste Werkzeug, meiner Meinung nach, um diese Probleme anzugehen, ist ANTS Memory Profiler. Version 5 ist eine zweischneidige Sache, da sie Performance- und Memory-Profiler in zwei separate SKUs aufgeteilt haben (früher waren sie zusammengebunden) aber Memory Profiler 5.0 ist absolut blitzschnell. Das Profilieren dieser Probleme war früher langsam wie Melasse, aber sie haben es irgendwie umgangen.
Wenn es sich nicht um ein persönliches Projekt mit keiner Absicht zur Weiterverbreitung handelt, sollten Sie die wenigen Hundert Dollar investieren, die für ANTS erforderlich sind - aber natürlich zunächst die Testphase nutzen. Es ist ein großartiges Werkzeug für genau diese Art von Analyse.