In den meisten Fällen wird empfohlen, keine Speicherbereinigung zu erzwingen. (Jedes System, an dem ich gearbeitet habe, hatte die Speicherbereinigung erzwungen, Probleme unterstrichen, die bei einer Lösung die Notwendigkeit der Speicherbereinigung beseitigt hätten, und das System erheblich beschleunigt.)
Es gibt ein paar Fälle , wenn Sie mehr über die Speichernutzung wissen dann der Garbage Collector tut. Es ist unwahrscheinlich, dass dies in einer Mehrbenutzeranwendung oder einem Dienst der Fall ist, der auf mehr als eine Anfrage gleichzeitig reagiert.
Bei einigen Stapelverarbeitungen wissen Sie jedoch mehr als der GC. Betrachten Sie beispielsweise eine Anwendung, die.
- Erhält eine Liste der Dateinamen in der Befehlszeile
- Verarbeitet eine einzelne Datei und schreibt das Ergebnis in eine Ergebnisdatei.
- Erstellt während der Verarbeitung der Datei viele miteinander verknüpfte Objekte, die erst nach Abschluss der Verarbeitung der Datei erfasst werden können (z. B. ein Analysebaum).
- Hält nicht viel Status zwischen den verarbeiteten Dateien .
Möglicherweise können Sie (nach sorgfältiger Prüfung) prüfen, ob Sie eine vollständige Speicherbereinigung erzwingen sollten, nachdem Sie jede Datei verarbeitet haben.
Ein anderer Fall ist ein Dienst, der alle paar Minuten aufwacht, um einige Elemente zu verarbeiten, und keinen Zustand beibehält, während er schläft . Dann kann es sich lohnen, kurz vor dem Schlafengehen eine vollständige Sammlung zu erzwingen .
Ich würde nur in Betracht ziehen, eine Sammlung zu erzwingen, wenn ich weiß, dass in letzter Zeit viele Objekte erstellt wurden und derzeit nur auf sehr wenige Objekte verwiesen wird.
Ich hätte lieber eine Garbage Collection-API, wenn ich ihr Hinweise zu solchen Dingen geben könnte, ohne selbst einen GC erzwingen zu müssen.
Siehe auch " Rico Marianis Performance-Leckerbissen "