In .NET wird die MemoryStream-Klasse häufig zur Verarbeitung von Binärdaten im Speicher verwendet. Bei der Arbeit mit MemoryStreams stellt sich häufig die Frage nach Speicherlecks, wenn der Stream nicht explizit geschlossen wird.
Um zu verstehen, ob ein Speicherleck auftreten kann, untersuchen wir das folgende Codefragment:
MemoryStream foo() { MemoryStream ms = new MemoryStream(); // Write data to ms return ms; } void bar() { MemoryStream ms2 = foo(); // Perform operations on ms2 return; }
In diesem Szenario wird der in foo() erstellte MemoryStream zurückgegeben und schließlich zeigt ms2 in bar() auf ihn. Die Frage ist, ob der MemoryStream ordnungsgemäß entsorgt wird, auch wenn er nicht explizit geschlossen wird.
Die Antwort ist, dass Sie bei der aktuellen Implementierung von nicht auf einen Speicherverlust stoßen werden MemoryStream. Der Aufruf von Dispose() führt nicht zu einer schnelleren Bereinigung des MemoryStream-Speichers. Während Dispose() weitere Lese-/Schreibvorgänge im Stream verhindert, hat es keinen Einfluss auf die zugrunde liegende Speicherzuweisung.
Es wird im Allgemeinen aus folgenden Gründen als gute Praxis angesehen, Dispose() aufzurufen:
Wenn Sie jedoch absolut sicher sind, dass Sie nie von MemoryStream zu einem anderen Stream wechseln müssen, können Sie sich dafür entscheiden, Dispose() nicht aufzurufen, ohne dass es zu Speicherlecks kommt.
Das obige ist der detaillierte Inhalt vonVerursachen nicht geschlossene MemoryStreams in .NET Speicherlecks?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!