Warum denken die Leute, dass ein Speicherverlust in .NET nicht mit einem anderen Verlust identisch ist?
Ein Speicherverlust tritt auf, wenn Sie eine Verbindung zu einer Ressource herstellen und diese nicht loslassen. Sie können dies sowohl in verwalteter als auch in nicht verwalteter Codierung tun.
In Bezug auf .NET und andere Programmiertools gab es Ideen zur Speicherbereinigung und andere Möglichkeiten zur Minimierung von Situationen, die zu einem Leck Ihrer Anwendung führen. Die beste Methode zur Verhinderung von Speicherlecks besteht jedoch darin, dass Sie Ihr zugrunde liegendes Speichermodell und die Funktionsweise auf der von Ihnen verwendeten Plattform verstehen müssen.
Zu glauben, dass GC und andere Magie Ihr Chaos beseitigen, ist der kurze Weg zu Speicherlecks und wird später schwer zu finden sein.
Wenn Sie die Codierung nicht verwalten, stellen Sie normalerweise sicher, dass Sie bereinigen. Sie wissen, dass die Ressourcen, die Sie in Anspruch nehmen, in Ihrer Verantwortung für die Bereinigung liegen und nicht für die des Hausmeisters.
In .NET hingegen denken viele Leute, dass der GC alles bereinigen wird. Nun, es tut etwas für Sie, aber Sie müssen sicherstellen, dass es so ist. .NET verpackt viele Dinge, sodass Sie nicht immer wissen, ob es sich um eine verwaltete oder nicht verwaltete Ressource handelt, und Sie müssen sicherstellen, womit Sie es zu tun haben. Der Umgang mit Schriftarten, GDI-Ressourcen, Active Directory, Datenbanken usw. ist normalerweise wichtig.
In verwalteten Begriffen werde ich meinen Hals auf die Linie legen, um zu sagen, dass er verschwindet, sobald der Prozess beendet / entfernt wird.
Ich sehe jedoch, dass viele Leute dies haben, und ich hoffe wirklich, dass dies enden wird. Sie können den Benutzer nicht bitten, Ihre App zu beenden, um Ihr Chaos zu beseitigen! Schauen Sie sich einen Browser an, der IE, FF usw. sein kann, öffnen Sie beispielsweise Google Reader, lassen Sie ihn einige Tage lang stehen und sehen Sie sich an, was passiert.
Wenn Sie dann einen anderen Tab im Browser öffnen, zu einer Site surfen und dann den Tab schließen, auf dem sich die andere Seite befand, auf der der Browser leckte, wird der Browser Ihrer Meinung nach den Speicher freigeben? Nicht so beim IE. Auf meinem Computer verbraucht der Internet Explorer in kurzer Zeit (ca. 3-4 Tage) problemlos 1 GB Speicher, wenn ich Google Reader verwende. Einige Zeitungen sind noch schlimmer.