Bagikan melalui


Koleksi yang Diinduksi

Dalam kebanyakan kasus, pengumpul sampah dapat menentukan waktu terbaik untuk melakukan pengumpulan, dan Anda harus membiarkannya berjalan secara mandiri. Ada situasi langka ketika pengumpulan paksa dapat meningkatkan performa aplikasi Anda. Dalam kasus ini, Anda dapat menginduksi pengumpulan sampah dengan menggunakan metode GC.Collect untuk memaksa pengumpulan sampah.

Gunakan metode GC.Collect ketika ada pengurangan signifikan dalam jumlah memori yang digunakan pada titik tertentu dalam kode aplikasi Anda. Misalnya, jika aplikasi Anda menggunakan kotak dialog kompleks yang memiliki beberapa kontrol, memanggil Collect saat kotak dialog ditutup dapat meningkatkan performa dengan segera mengklaim kembali memori yang digunakan oleh kotak dialog. Pastikan aplikasi Anda tidak terlalu sering menginduksi pengumpulan sampah, karena itu dapat menurunkan performa jika pengumpul sampah mencoba mengklaim kembali objek pada waktu yang tidak optimal. Anda dapat memberikan nilai enumerasi GCCollectionMode.Optimized ke metode Collect untuk dikumpulkan hanya ketika pengumpulan akan produktif, seperti yang dibahas di bagian berikutnya.

Mode pengumpulan GC

Anda dapat menggunakan salah satu kelebihan beban metode GC.Collect yang menyertakan nilai GCCollectionMode untuk menentukan perilaku untuk koleksi paksa sebagai berikut.

GCCollectionMode nilai Deskripsi
Default Menggunakan pengaturan pengumpulan sampah default untuk versi .NET yang sedang berjalan.
Forced Memaksa pengumpulan sampah segera terjadi. Ini setara dengan memanggil kelebihan beban GC.Collect(). Ini menyebabkan koleksi pemblokiran penuh dari semua generasi.

Anda juga dapat memadatkan tumpukan objek besar dengan mengatur properti GCSettings.LargeObjectHeapCompactionMode ke GCLargeObjectHeapCompactionMode.CompactOnce sebelum memaksa pengumpulan sampah pemblokiran penuh segera.
Optimized Memungkinkan pengumpul sampah untuk menentukan apakah waktu saat ini optimal untuk mengklaim kembali objek.

Pengumpul sampah dapat menentukan bahwa pengumpulan tidak akan cukup produktif untuk dibenarkan, dalam hal ini akan kembali tanpa mengklaim kembali objek.

Pengumpulan latar belakang atau pemblokiran

Anda dapat memanggil kelebihan beban metode GC.Collect(Int32, GCCollectionMode, Boolean) untuk menentukan apakah koleksi yang diinduksi memblokir atau tidak. Jenis pengumpulan yang dilakukan tergantung pada kombinasi parameter mode dan blocking metode. mode adalah anggota enumerasi GCCollectionMode, dan blocking merupakan nilai Boolean. Tabel berikut ini meringkas interaksi argumen mode dan blocking.

mode blocking = true blocking = false
Forced atau Default Pengumpulan pemblokiran dilakukan sesegera mungkin. Jika pengumpulan latar belakang sedang berlangsung dan generasi adalah 0 atau 1, metode Collect(Int32, GCCollectionMode, Boolean) segera memicu pengumpulan pemblokiran dan kembali ketika pengumpulan selesai. Jika pengumpulan latar belakang sedang berlangsung dan parameter generation adalah 2, metode menunggu hingga pengumpulan latar belakang selesai, memicu pengumpulan pemblokiran generasi 2, lalu kembali. Pengumpulan dilakukan sesegera mungkin. Metode Collect(Int32, GCCollectionMode, Boolean) meminta pengumpulan latar belakang, tetapi ini tidak dijamin; tergantung pada keadaannya, pengumpulan pemblokiran mungkin masih dilakukan. Jika pengumpulan latar belakang sudah berlangsung, metode akan segera kembali.
Optimized Pengumpulan pemblokiran dapat dilakukan, tergantung pada status pengumpul sampah dan parameter generation. Para sampah mencoba memberikan performa yang optimal. Pengumpulan dapat dilakukan, tergantung pada keadaan pengumpul sampah. Metode Collect(Int32, GCCollectionMode, Boolean) meminta pengumpulan latar belakang, tetapi ini tidak dijamin; tergantung pada keadaannya, pengumpulan pemblokiran mungkin masih dilakukan. Para sampah mencoba memberikan performa yang optimal. Jika pengumpulan latar belakang sudah berlangsung, metode akan segera kembali.

Lihat juga