Mode latensi

Untuk mendapatkan kembali objek, pengumpul sampah (GC) harus menghentikan semua utas yang mengeksekusi dalam aplikasi. Jangka waktu selama pengumpul sampah aktif disebut sebagai latensinya.

Dalam beberapa situasi, seperti saat aplikasi mengambil data atau menampilkan konten, pengumpulan sampah penuh dapat terjadi pada waktu yang kritis dan menghambat kinerja. Anda dapat menyesuaikan gangguan pengumpul sampah dengan menyetel properti GCSettings.LatencyMode ke salah satu nilai System.Runtime.GCLatencyMode.

Pengaturan latensi rendah

Menggunakan pengaturan latensi "rendah" berarti pengumpul sampah lebih sedikit mengganggu aplikasi Anda. Pengumpulan sampah lebih konservatif tentang merebut kembali memori.

Pencacahan System.Runtime.GCLatencyMode menyediakan dua setelan latensi rendah:

  • GCLatencyMode.LowLatency menekan koleksi generasi 2 dan hanya menjalankan koleksi generasi 0 dan 1. Ini hanya dapat digunakan untuk waktu yang singkat. Selama periode yang lebih lama, jika sistem berada di bawah tekanan memori, pengumpul sampah akan memicu pengumpulan, yang dapat menjeda aplikasi secara singkat dan mengganggu operasi yang membutuhkan waktu. Pengaturan ini hanya tersedia untuk pengumpulan sampah stasiun kerja.

  • GCLatencyMode.SustainedLowLatency menekan koleksi generasi 2 latar depan dan hanya menjalankan koleksi generasi 0, 1, dan generasi 2 latar belakang. Ini dapat digunakan untuk jangka waktu yang lebih lama, dan tersedia untuk pengumpulan sampah workstation dan server. Pengaturan ini tidak dapat digunakan jika pengumpulan sampah latar belakang dinonaktifkan.

Selama periode latensi rendah, koleksi generasi 2 ditekan kecuali hal berikut terjadi:

  • Sistem menerima pemberitahuan memori rendah dari sistem operasi.

  • Kode aplikasi menginduksi koleksi dengan memanggil metode GC.Collect dan menetapkan 2 untuk parameter generation.

Skenario

Tabel berikut mencantumkan skenario aplikasi untuk menggunakan nilai GCLatencyMode :

Mode latensi Skenario aplikasi
Batch Untuk aplikasi yang tidak memiliki antarmuka pengguna (UI) atau operasi sisi server.

Saat pengumpulan sampah latar belakang dinonaktifkan, ini adalah mode default untuk pengumpulan sampah stasiun kerja dan server. Mode Batch juga menimpa setelan gcConcurrent , yaitu, mencegah pengumpulan latar belakang atau serentak.
Interactive Untuk sebagian besar aplikasi yang memiliki UI.

Ini adalah mode default untuk pengumpulan sampah workstation dan server. Namun, jika aplikasi dihosting, pengaturan pengumpul sampah dari proses hosting akan diutamakan.
LowLatency Untuk aplikasi yang memiliki operasi jangka pendek dan sensitif terhadap waktu di mana interupsi dari pengumpul sampah dapat mengganggu. Misalnya, aplikasi yang membuat animasi atau fungsi akuisisi data.
SustainedLowLatency Untuk aplikasi yang memiliki operasi sensitif waktu untuk durasi waktu yang tertampung tetapi berpotensi lebih lama di mana interupsi dari pengumpul sampah dapat mengganggu. Misalnya, aplikasi yang membutuhkan waktu respons cepat karena data pasar berubah selama jam perdagangan.

Mode ini menghasilkan ukuran heap terkelola yang lebih besar daripada mode lainnya. Karena tidak memadatkan tumpukan terkelola, fragmentasi yang lebih tinggi dimungkinkan. Pastikan bahwa memori yang cukup tersedia.

Pedoman untuk menggunakan latensi rendah

Saat Anda menggunakan mode GCLatencyMode.LowLatency , pertimbangkan panduan berikut:

  • Pertahankan periode waktu dalam latensi rendah sesingkat mungkin.

  • Hindari mengalokasikan jumlah memori yang tinggi selama periode latensi rendah. Notifikasi memori rendah dapat terjadi karena pengumpulan sampah mengambil kembali objek yang lebih sedikit.

  • Saat dalam mode latensi rendah, minimalkan jumlah alokasi baru, khususnya alokasi ke tumpukan objek besar dan objek yang disematkan.

  • Waspadai utas yang dapat mengalokasikan. Karena setelan properti LatencyMode mencakup seluruh proses, pengecualian OutOfMemoryException dapat dibuat pada utas apa pun yang mengalokasikan.

  • Bungkus kode latensi rendah di wilayah eksekusi terbatas. Untuk informasi selengkapnya, lihat Wilayah eksekusi terbatas .

  • Anda dapat memaksa koleksi generasi 2 selama periode latensi rendah dengan memanggil metode GC.Collect(Int32, GCCollectionMode).

Lihat juga