Pengurusan dan Memori Objek C#: Perbandingan Buang dan tetapan kepada Null
Soalan biasa apabila bekerja dengan bahasa pengaturcaraan yang dikumpul sampah seperti C# ialah: Adakah saya perlu membebaskan objek secara manual dan menetapkannya kepada null, atau adakah pengumpul sampah (GC) akan mengendalikan pembersihan?
Tetapkan objek kepada Null
Pengumpul sampah secara automatik akan membersihkan objek yang tidak lagi digunakan berdasarkan hayat dan ketersediaan memorinya. Menetapkan objek kepada null tidak segera memulakan pelepasannya. Ia hanya mengalih keluar rujukan kepada objek, menjadikannya layak untuk dikumpulkan oleh GC.
Dalam sesetengah kes, ia mungkin berfaedah untuk menetapkan objek kepada null secara eksplisit. Contohnya, jika anda mempunyai medan statik yang nilainya tidak diperlukan lagi, menetapkannya kepada null akan mengeluarkan rujukan kepada objek, membolehkan GC menuntut semula ingatannya dengan lebih cepat.
Pelepasan objek
Jika objek melaksanakan antara muka IDisposable, sangat disyorkan untuk melepaskannya apabila ia tidak diperlukan lagi, terutamanya jika ia mengurus sumber yang tidak terurus. Sumber tidak terurus ialah sumber yang tidak diproses oleh GC, seperti pemegang fail atau sambungan pangkalan data.
Lepaskan objek membolehkan anda melepaskan sumber yang tidak terurus dengan segera dan mengelakkan kebocoran memori. C# menyediakan cara untuk melepaskan objek secara automatik menggunakan pernyataan menggunakan:
<code class="language-csharp">using (MyIDisposableObject obj = new MyIDisposableObject()) { // 使用对象 } // 对象在此处被释放</code>
Ini bersamaan dengan:
<code class="language-csharp">MyIDisposableObject obj; try { obj = new MyIDisposableObject(); } finally { if (obj != null) { ((IDisposable)obj).Dispose(); } }</code>
Dengan menggunakan, anda boleh memastikan objek dilepaskan dengan betul walaupun dalam keadaan tidak normal.
Atas ialah kandungan terperinci To Null or to Dispose: Bilakah Saya Perlu Membersihkan Objek C# Saya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!