Speicherlecks in .NET MemoryStream
Frage:
Beim Arbeiten mit MemoryStream in . NET, ist es notwendig, es manuell zu schließen, um Speicher zu verhindern Lecks?
Codebeispiel:
MemoryStream foo() { MemoryStream ms = new MemoryStream(); // write stuff to ms return ms; } void bar() { MemoryStream ms2 = foo(); // do stuff with ms2 return; }
Antwort:
Nein, es ist nicht notwendig, das manuell zu schließen MemoryStream in diesem speziellen Codebeispiel. Der MemoryStream wird automatisch verworfen, wenn er am Ende der foo()-Methode den Gültigkeitsbereich verlässt.
Erklärung:
Die MemoryStream-Klasse implementiert die IDisposable-Schnittstelle. die eine Dispose()-Methode bereitstellt, um nicht verwaltete Ressourcen freizugeben. In der aktuellen Implementierung weist MemoryStream jedoch keine nicht verwalteten Ressourcen zu. Durch den Aufruf von Dispose() wird der vom MemoryStream verwendete Speicher nicht schneller bereinigt.
Im Allgemeinen empfiehlt es sich, Dispose() für verfügbare Objekte aufzurufen, da dadurch sichergestellt wird, dass alle nicht verwalteten Ressourcen ordnungsgemäß freigegeben werden. Im Fall von MemoryStream ist dies in diesem speziellen Codebeispiel jedoch nicht unbedingt erforderlich.
Es kann jedoch ratsam sein, Dispose() aufzurufen, wenn:
Das obige ist der detaillierte Inhalt vonMuss ich den MemoryStream von .NET manuell schließen, um Lecks zu vermeiden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!