Rumah > pembangunan bahagian belakang > C++ > Close() vs. Dispose(): Kaedah Mana Yang Perlu Anda Gunakan untuk Objek Strim dalam C#?

Close() vs. Dispose(): Kaedah Mana Yang Perlu Anda Gunakan untuk Objek Strim dalam C#?

Patricia Arquette
Lepaskan: 2025-01-05 03:25:08
asal
140 orang telah melayarinya

Close() vs. Dispose(): Which Method Should You Use for Stream Objects in C#?

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:

    • Menjamin keluaran sumber tanpa mengira keadaan ralat, menggalakkan ketekalan pengendalian ralat.
    • Mungkin sukar untuk mengenal pasti titik penutupan strim sebenar disebabkan berbilang pendakap kerinting bersarang.
  • Tutup() dan Dispose() Gabungan:

    • Menutup strim secara eksplisit menggunakan Close() selepas menggunakan blok memastikan penutupan selesai.
    • Menjelaskan struktur dan niat kod berbanding menggunakan hanya Close().

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
    }
}
Salin selepas log masuk

Cadangan

Untuk meningkatkan kebolehbacaan kod, kami mengesyorkan pendekatan berikut:

using (var stream = ...)
{
    /* code */

    stream.Close(); // Explicit close
}
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan