Pelupusan Objek Strim yang Betul: Close() vs. Dispose()
Dalam pengaturcaraan, mengurus sumber seperti strim dengan cekap adalah penting. Kelas aliran seperti Stream, StreamReader dan StreamWriter melaksanakan antara muka IDisposable, mempersembahkan dua kaedah untuk melepaskan sumber: Close() dan Dispose(). Artikel ini bertujuan untuk menjelaskan peranan dan amalan terbaik mereka.
Close() lwn. Dispose()
Kaedah Close() secara eksplisit menutup strim, manakala Dispose () kaedah menggunakan kaedah Dispose(bool), yang secara dalaman mengendalikan keluaran sumber. Kaedah Close() diwarisi daripada kelas Strim dan dilaksanakan secara berbeza untuk setiap jenis strim terbitan.
Cara ia Berfungsi
Menggunakan penyahpepijat atau Reflector.NET, kita boleh mendalami pelaksanaan kaedah ini. Kedua-dua kaedah Close() akhirnya memanggil Dispose(true), yang membebaskan sumber dan menghalang penggunaan objek selanjutnya.
Amalan Terbaik
Memandangkan kesetaraan Close() dan Dispose(), pilihan bermuara kepada kebolehbacaan.
Menggunakan ( ... ) Sekat:
Tutup() dan Dispose() Gabungan:
Contoh
Dalam coretan kod yang disediakan, menggunakan blok digunakan untuk memastikan pelepasan yang betul. Walau bagaimanapun, kaedah Close() juga dipanggil, yang tidak diperlukan sepenuhnya.
using (Stream responseStream = response.GetResponseStream()) { using (StreamReader reader = new StreamReader(responseStream)) { using (StreamWriter writer = new StreamWriter(filename)) { // Stream processing... writer.Close(); // Explicit close } reader.Close(); // Explicit close } }
Cadangan
Untuk meningkatkan kebolehbacaan kod, kami mengesyorkan pendekatan berikut:
using (var stream = ...) { /* code */ stream.Close(); // Explicit close }
Kaedah ini menggabungkan kejelasan Close() dengan jaminan pelepasan sumber penggunaan sekat.
Atas ialah kandungan terperinci Close() vs. Dispose(): Kaedah Mana Yang Perlu Anda Gunakan untuk Objek Strim dalam C#?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!