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
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.
Da muss man wohl eher mit Tools wie BoundsChecker ran...
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?
Ich glaub, das kommt mit Studio schon mit:
http://www.codeproject.com/macro/vsedebugaddin.asp?df=100&forumid=16421&exp=0&select=793469
Hallo Golo,
hast Du das Problem lösen können?
Wenn ja, dann natürlich wie :
Stehe nämlich vor gleichem Problem 9
Gruß