Hallo, ich habe ein C# WinForms Anwendung die eine externe Komponente (Canvas) benutzt. Leider wird irgendwo ein Array befüllt aber nicht entleert, sodass der Speicherverbrauch an die Grenzen kommt. Gibt es eine Möglichkeit diese großen Datenfelder aufzudecken? (VS oder #Develop)
Ich würde versuchen mir die Größe der Objekte z.B. mit der length Eigenschaft auf den Bildschirm anzuzeigen, oder mit watch , der Überwachung, nachschauen.
Gast
#3367027
Hast du vielleicht ein Dispose vergessen? Ansonsten habe ich mit dem ANTS Memory Profiler sehr gute Erfahrungen gemacht: http://www.red-gate.com/products/dotnet-development/ants-memory-profiler/
mMn hat C# (zumindest im .NET-Framework) einen Garbage-Collector, so dass das nicht passieren dürfte, wenn du es nicht explizit verlangst.
Marcus W. schrieb: > ...einen Garbage-Collector, so > dass das nicht passieren dürfte, wenn du es nicht explizit verlangst. Man muss aber schon aufpassen. Trotz GC kann man noch sehr leicht Memory-Leaks produzieren (selbst wenn kein Native Code im Spiel ist). Z.B. Event-Handler sind eine böse Falle. Wenn da ein Objekt registriert ist, hängt es natürlich noch im Speicher, obwohl alle anderen Referenzen die man so hat schon freigegeben wurden. Sowas kann man leicht übersehen. Manchmal hilft dann wirklich nur noch der Memory Profiler. Damit kommt man dann aber sehr schnell und zuverlässig ans Ziel, da dieser genau anzeigt welche Objekte von wem wie gehalten werden.
Gast
#3371200
Gerade .Net zeigt dir doch beim Debuggen im Visual Studio an wo der Stack oder heapoverflow auftritt.
Jenny schrieb: > Gerade .Net zeigt dir doch beim Debuggen im Visual Studio an wo der > Stack oder heapoverflow auftritt. Es wäre schon ein riesen Zufall, wenn ausgerechnet die Speicherallokation, die die Exception auslöst, auch das Memory Leak wäre. Nein, die einzig vernünftige Möglichkeit (weil ohne Rumstochern) ist tatsächlich ein Memory-Profiler. Den muss man ja nich gleich kaufen. I.d.R. bieten die Hersteller eine 30-Tage-Testlizenz zum Ausprobieren. Wir verwenden z.B. diesen hier: http://memprofiler.com/ . Mit dem Redgate Profiler hatten wir bei großen Systemen leider massive Probleme. Grüße Markus
Gast
#3394178
Evtl. allokiert die externe Komponente auch am Framework vorbei noch irgendwo Speicher? Ich rate auch zum Profiler.
Gast
#3399160
ich bin da ganz bei bb. Wenn Bilder benutzt werden, die ja dann logischerweise im Canvas gepinselt werden muss man das Teil mit Dispose per Hand wieder wegmachen; da hilft einem der GC nicht weiter.
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.