Walaupun namanya, menggunakan MemoryStream dalam .NET tidak semestinya membawa kepada kebocoran memori jika ia kekal tidak ditutup. Artikel ini menangani kebimbangan yang dibangkitkan dalam coretan kod yang disediakan:
MemoryStream foo() { MemoryStream ms = new MemoryStream(); // write stuff to ms return ms; } void bar() { MemoryStream ms2 = foo(); // do stuff with ms2 return; }
Kebimbangan timbul daripada kemungkinan bahawa MemoryStream yang diperuntukkan mungkin tidak dilupuskan atau dilepaskan dengan betul, membawa kepada pengumpulan memori. Secara khusus, pertanyaannya ialah sama ada strim akhirnya akan menjadi sampah yang dikumpul sebaik sahaja fungsi itu kembali.
Dalam pelaksanaan semasa, tiada kebocoran memori berlaku. Ini kerana MemoryStream yang dikembalikan masih dalam skop dan boleh diakses dalam fungsi bar(). Oleh itu, sebarang rujukan berpotensi kepada strim dikekalkan, menghalang memori daripada dibebaskan lebih awal.
Memanggil Buang() pada MemoryStream tidak menghapuskan memori yang diperuntukkan dengan lebih cepat. Walau bagaimanapun, ia menghalang operasi baca/tulis selanjutnya pada strim. Ini adalah amalan yang baik, kerana ia mengelakkan sebarang isu yang berpotensi jika strim bertujuan untuk digunakan untuk tujuan lain pada masa hadapan.
Adalah penting untuk ambil perhatian bahawa pelaksanaan MemoryStream pada masa hadapan mungkin menggabungkan sumber yang akan dikeluarkan pada memanggil Dispose(). Oleh itu, secara amnya adalah dinasihatkan untuk mempraktikkan ini sebagai konvensyen kod.
Walaupun coretan kod khusus tidak mengakibatkan kebocoran memori, adalah amalan yang baik untuk melupuskan strim secara eksplisit ke menampung potensi perubahan dalam pelaksanaan masa hadapan dan untuk mengekalkan kebolehbacaan kod.
Atas ialah kandungan terperinci Adakah Menggunakan MemoryStream dalam .NET Pasti Menyebabkan Kebocoran Memori?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!