Dalam .NET, kelas MemoryStream sering digunakan untuk mengendalikan data binari dalam ingatan. Apabila bekerja dengan MemoryStreams, soalan biasa timbul mengenai kebocoran memori jika strim tidak ditutup secara eksplisit.
Untuk memahami jika kebocoran memori boleh berlaku, mari kita periksa coretan kod berikut:
MemoryStream foo() { MemoryStream ms = new MemoryStream(); // Write data to ms return ms; } void bar() { MemoryStream ms2 = foo(); // Perform operations on ms2 return; }
Dalam senario ini, MemoryStream yang dibuat dalam foo() dikembalikan dan akhirnya ditunjuk oleh ms2 dalam bar(). Persoalannya ialah sama ada MemoryStream akan dilupuskan dengan betul, walaupun ia tidak ditutup secara eksplisit.
Jawapannya ialah anda tidak akan menghadapi kebocoran memori dengan pelaksanaan semasa MemoryStream. Memanggil Dispose() tidak akan menghasilkan pembersihan memori MemoryStream dengan lebih pantas. Walaupun Dispose() menghalang operasi Baca/Tulis selanjutnya pada strim, ia tidak menjejaskan peruntukan memori asas.
Secara amnya dianggap amalan yang baik untuk memanggil Dispose() atas sebab berikut:
Walau bagaimanapun, jika anda benar-benar pasti bahawa anda tidak perlu bertukar daripada MemoryStream ke strim lain, anda boleh memilih untuk tidak menghubungi Buang() tanpa memperkenalkan sebarang kebocoran memori.
Atas ialah kandungan terperinci Adakah MemoryStream yang Tidak Ditutup dalam .NET Menyebabkan Kebocoran Memori?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!