Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Untuk sebagian besar objek yang dibuat aplikasi, Anda dapat mengandalkan pengumpul sampah .NET untuk menangani manajemen memori. Namun, ketika Anda membuat objek yang menyertakan sumber daya yang tidak dikelola, Anda harus secara eksplisit merilis sumber daya tersebut ketika Anda selesai menggunakannya. Jenis sumber daya yang paling umum dari yang tidak dikelola adalah objek yang membungkus sumber daya sistem operasi, seperti file, jendela, koneksi jaringan, atau koneksi database. Meskipun pengumpul sampah dapat melacak masa pakai objek yang merangkum sumber daya yang tidak dikelola, ia tidak tahu cara melepaskan dan membersihkan sumber daya yang tidak dikelola.
Jika jenis Anda menggunakan sumber daya yang tidak dikelola, Anda harus melakukan hal berikut:
Terapkan pola pembuangan. Ini mengharuskan Anda menyediakan implementasi IDisposable.Dispose untuk memungkinkan pelepasan deterministik dari sumber daya non-terkelola. Konsumen jenis Anda memanggil Dispose ketika objek (dan sumber daya yang digunakannya) tidak lagi diperlukan. Metode ini Dispose segera melepaskan sumber daya yang tidak dikelola.
Jika pengguna seperti Anda lupa memanggil Dispose, berikan cara agar sumber daya yang tidak dikelola dirilis. Ada dua cara untuk melakukan ini:
Gunakan handel yang aman untuk membungkus sumber daya Anda yang tidak dikelola. Ini adalah teknik yang direkomendasikan. Handle aman berasal dari kelas abstrak System.Runtime.InteropServices.SafeHandle dan menyertakan metode yang kuat Finalize. Saat Anda menggunakan safe handle, Anda cukup mengimplementasikan antarmuka IDisposable dan memanggil metode Dispose dari safe handle Anda pada implementasi Anda IDisposable.Dispose . Finalizer dari pengendali yang aman (safe handle) dipanggil secara otomatis oleh pengumpul sampah jika metode Dispose tidak dipanggil.
—atau—
Definisikan finalizer. Finalisasi memungkinkan rilis sumber daya yang tidak terkelola secara nondeterministik ketika konsumen suatu tipe gagal memanggil IDisposable.Dispose untuk membuangnya secara deterministik.
Peringatan
Finalisasi objek dapat menjadi operasi yang kompleks dan rawan kesalahan, kami sarankan Anda menggunakan handel yang aman alih-alih menyediakan finalizer Anda sendiri.
Konsumen dari jenis Anda kemudian dapat langsung memanggil implementasi Anda IDisposable.Dispose untuk membebaskan memori yang digunakan oleh sumber daya tak terkelola. Ketika Anda menerapkan metode Dispose dengan benar, metode Finalize dari pegangan aman Anda atau penimpaan metode Object.Finalize Anda sendiri menjadi perlindungan untuk membersihkan sumber daya jika metode Dispose tidak dipanggil.
Di bagian ini
Menerapkan metode dispose menjelaskan cara menerapkan pola dispose untuk melepaskan sumber daya tak terkelola.
Menggunakan objek yang mengimplementasikan IDisposable menjelaskan bagaimana konsumen tipe tertentu memastikan bahwa implementasi dari tipe tersebut dipanggil. Kami sangat menyarankan menggunakan pernyataan C# using (atau Visual Basic Using) untuk melakukan ini.
Referensi
| Jenis / Anggota | Deskripsi |
|---|---|
| System.IDisposable | Menentukan metode Dispose untuk merilis sumber daya yang tidak dikelola. |
| Object.Finalize | Menyediakan finalisasi objek jika sumber daya yang tidak dikelola tidak dirilis oleh metode Dispose. |
| GC.SuppressFinalize | Menekan finalisasi. Metode ini biasanya dipanggil oleh metode Dispose untuk mencegah finalizer dijalankan. |