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.
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.
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
Evtl. allokiert die externe Komponente auch am Framework vorbei noch irgendwo Speicher? Ich rate auch zum Profiler.
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.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.