Zitat:
Mit euren Aussagen zum selber aufräumen des Speichers habe ich aber so meine Probleme.
Das Problem bei Fenstern ist, dass es kein richtiges Selberaufräumen gibt.
Es wird weiterhin ein
Win32 Fenster angelegt, weiterhin wird mit Handles und Messages umhergeworfen (Glücklicherweise wird man selbst nur selten damit belästigt...).
Der Unterschied im Aufräumen bei Show <-> ShowDialog liegt in der Verwendung der beiden Methoden.
Bei Show ist es meist vollkommen legitim das Fenster beim Schließen zu zerstören. Bei ShowDialog braucht man aber meistens den Dialog
nach dem Anzeigen um die Benutzereingaben auszuwerten.
Deshalb muss ein Dialog explizit freigegeben werden, indem man sich an IDisposable hält.
Preisfrage: Hast du ein MemLeak wenn du Dispose nach einem Dialog vergisst?
Nein, wie die meisten Klassen, die IDisposable implementieren, besitzt Form einen Finalizer, der ausgeführt wird wenn die GC das Form aufräumt. Der kann dann den ganzen Müll aufräumen...
Da Finalizer aber einen GC sweep _extrem_ ausbremsen sollte man immer Dispose aufrufen, statt es an den Finalizer abzutreten.
Fast alle .Net SPrachen bringen ein using statement mit (wie oben in meinem Chrome Schnipsel).
Dieses sorgt in einer Zeile dafür, dass eine Variable deklariert, besetzt und aufgeräumt wird.
Zitat:
Kann man das irgendwie prüfen? Ok eventuell mit dem Profiler (aber wie? -> genaue Erklärung bitte)
Schaue mal
hier vorbei.
Vorsicht: FF-Fans sollten "http://
msdn.microsoft.com/msdntv/" im Filter der liebenswerten IE Tab Extension haben um nicht auch noch dieses Mistvieh direkt starten zu müssen.
Zitat:
Wenn ich nämlich mal den Taskmanager im Auge behalte während ich mein Fenster mit Show öffne, dann verbraucht meine Anwendung mehr Speicher (jedesmal wenn ich das zweite Fenster öffne).
Wenn ich es schliesse geht der Speicher aber nicht zurück.
TaskMan taugt eigentlich rein gar nix um etwas über den Speicherverbrauch auszusagen...
Genauer sind die Performance counter, die du unter Admin Tools (bzw Verwaltung im dtsch Windows) findest. Dort gibt dir "private Bytes" (unter Process) die wirkliche reservierte Speichergröße. Also minus das was durch geteilte Bibliotheken, wie die CLR, beansprucht wird.