Wie alle existierenden Objekte (einer bestimmten Klasse) einer Anwendung auflisten?

12/09/2007 - 16:53 von Michael Lange | Report spam
Hallo,

Die Frage ist evtl. nicht so aussagekràftig, daher noch folgende
Erlàuterungen zu meinem Problem:

Ich möchte zur Laufzeit meiner Anwendung herausfinden, welche Objekte
einer bestimmten (Basis-)Klasse existieren, weil ich vermute, das in
manchen Situationen Objekte nicht wie gewünscht zerstört, oder auf Grund
von noch vorhandenen Referenzen nicht freigegeben werden.

Warum ich das brauche:

In einer umfangreichen Anwendung mit Datenbank (SQL-Server) bleiben
sporadisch Datenbankverbindungen erhalten, so das irgendwann im Laufe
der Benutzung zu einem Verbindungstimeout kommt, weil das Limit erreicht
ist, und keine neue Verbindung mehr geöffnet werden kann. In diesem
Moment hilft nur noch das Beenden der Anwendung.
Da ich mit der Prüfung der Sourcen keinen Anhaltspunkt für das
beobachtete Verhalten finden konnte, und das Problem höchstens 1-2 mal
pro Tag bei intensiver Programmbenutzung auftritt, aber dann sehr
störend ist, muss ich einen anderen Weg zur Ursache finden.

Wie komme ich also an die Objekte (mit den Datenbankverbindungen), um
diese auszuwerten, und damit die Fehlerquelle weiter einzugrenzen?


Michael
 

Lesen sie die antworten

#1 Günter Prossliner
12/09/2007 - 17:16 | Warnen spam
Hallo Michael!

Ich möchte zur Laufzeit meiner Anwendung herausfinden, welche Objekte
einer bestimmten (Basis-)Klasse existieren, weil ich vermute, das in
manchen Situationen Objekte nicht wie gewünscht zerstört, oder auf
Grund von noch vorhandenen Referenzen nicht freigegeben werden.



Am einfachsten:

* Code überprüfen (suchen wo eine SqlConnection erstelt wird)
* Logging einbauen (bzw. aktivieren)

Ansonsten geht das nur mit einem entsprechenden Debugger (z.b. unter
windgb):

1. An den Process attachen
2. SOS Extension laden:
.loadby sos mscorwks
3. Heap Stats ansehen:
!dumpheap -stat

Dann bekommst Du eine Liste mit der Anzahl der vom GC verwalteten Objekte
gruppiert nach Typ.


OK?
mfg GP

Ähnliche fragen