Laden...

Snapshot des Speichers erstellen

9 Antworten
2,140 Aufrufe
Letzter Beitrag: vor 17 Jahren
Snapshot des Speichers erstellen

Hallo,

wir haben in unserer Applikation das Problem, dass wir sehr langlebige Objekte haben, die anscheinend nicht korrekt freigegeben werden. Nun würden wir gerne herausfinden, welche das sind 😉.

Ein Profiler scheidet aus Performancegründen aus, da das Problem erst nach mehrtägiger Benutzung der Anwendung zu Tage tritt.

Ideal wäre eine Methode, die wir im laufenden Programm aufrufen könnten, die uns einen Snapshot des aktuellen Speicherinhaltes erstellt. Sprich, eine Auflistung aller Objekte sowie deren Werte. Klasse wären auch noch die Referenzen untereinander.

Problematisch könnte eventuell noch sein, dass unsere Applikation sehr viele Threads einsetzt, die natürlich in diesem Moment alle synchronisiert sein und bleiben müssen.

Wie bekommt man so etwas hin?

Viele Grüße,

der Eisbär

Wissensvermittler und Technologieberater
für .NET, Codequalität und agile Methoden

www.goloroden.de
www.des-eisbaeren-blog.de

Hallo Der Eisbär,

ohne da wirklich fundiertes Beitragen zu können. Ich würde mir mal die Klassen den GC angucken. Der ist m.E. der einzige, der über die (benutzten) Variablen Bescheid weiß.

herbivore

Der CLR-Profiler kommt mit Sourcecode.
Wirf mal einen Blick rein.

Gernot Melichar

Da muss man wohl eher mit Tools wie BoundsChecker ran...

Blog

Portable WebDAV Library

Windows Server Advanced Power Management
Erweitertes Energie-Management unter Windows

Hallo Eisbär,

ich würde an deiner stelle als erstes schauen, welche klassen du benutzt, die IDisposable implementieren.
Dann checken ob du die auch immer sauber frei gibts.

Wenn du noch das 1.1er Framework benutzt solltest du mal schauen, ob unter 2.0 das Problem immer noch da ist.
Ich hatte extreme probleme mit der GarbageCollection von 1.0 (große objecte kommen direkt in Generation 2 und werden erst sehr spät freigegeben. wenn man viele große Objekte erzeugt wächst die WorkingSetSize von dem .NET prozess extrem an. Ich habe drei Tage gebraucht, um da ein Workaround zu finden, der funktioniert (mit win32 Api aufrufen etc...)
Unter 2.0 ist der Speicherhunger meiner Anwendung radikal gesunken.
Die GC scheint da mit großen objekten viel besser umgehen zu können!
(unter 1.1 habe ich die 1.2GB maximum mem für .NET geknackt, unter 2.0 komme ich nicht über 300MB!)

So eine Dump-Funktion kann du mit dem Debugger-SDK implementieren.

Blöde Frage - wo finde ich das?

Wissensvermittler und Technologieberater
für .NET, Codequalität und agile Methoden

www.goloroden.de
www.des-eisbaeren-blog.de

Hallo Golo,

hast Du das Problem lösen können?
Wenn ja, dann natürlich wie :
Stehe nämlich vor gleichem Problem 9

Gruß