Bagikan melalui


Mode latensi

Untuk mengambil kembali objek, pengumpul sampah (GC) harus menghentikan semua utas yang sedang berjalan dalam aplikasi. Periode waktu di mana pengumpul sampah aktif disebut sebagai latensinya.

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

Pengaturan latensi rendah

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

Enumerasi System.Runtime.GCLatencyMode menyediakan dua pengaturan latensi rendah:

  • GCLatencyMode.LowLatency menekan koleksi generasi 2 dan hanya melakukan 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 kritis waktu. Pengaturan ini hanya tersedia untuk pengumpulan sampah stasiun kerja.

  • GCLatencyMode.SustainedLowLatency menekan koleksi generasi 2 di latar depan dan hanya melakukan koleksi generasi 0, 1, serta generasi 2 di latar belakang. Ini dapat digunakan untuk jangka waktu yang lebih lama, dan tersedia untuk stasiun kerja dan pengumpulan sampah 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 GC.Collect metode dan menentukan 2 untuk generation parameter .

Skenario

Tabel berikut mencantumkan skenario aplikasi untuk menggunakan GCLatencyMode nilai:

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

Ketika pengumpulan sampah latar belakang dinonaktifkan, ini adalah mode default untuk stasiun kerja dan pengumpulan sampah server. Batch mode juga mengambil alih pengaturan gcConcurrent , yaitu mencegah latar belakang atau koleksi bersamaan.
Interactive Untuk sebagian besar aplikasi yang memiliki UI.

Ini adalah mode default untuk stasiun kerja dan pengumpulan sampah server. Namun, jika aplikasi dihosting, pengaturan pengumpul sampah dari proses hosting lebih diutamakan.
LowLatency Untuk aplikasi yang memiliki operasi jangka pendek dan sensitif waktu di mana gangguan dari pengumpul sampah bisa mengganggu. Misalnya, aplikasi yang merender animasi atau fungsi akuisisi data.
SustainedLowLatency Untuk aplikasi yang memiliki operasi yang kritis terhadap waktu untuk jangka waktu tertentu yang berpotensi lebih lama, di mana gangguan dari pengumpul sampah dapat mengacaukan. Misalnya, aplikasi yang membutuhkan waktu respons cepat saat data pasar berubah selama jam perdagangan.

Mode ini menghasilkan ukuran tumpukan terkelola yang lebih besar daripada mode lainnya. Karena tidak memampatkan tumpukan terkelola, fragmentasi yang lebih tinggi dimungkinkan. Pastikan memori yang memadai tersedia.

Panduan untuk menggunakan latensi rendah

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

  • Jaga jangka waktu dalam latensi rendah sesingkat mungkin.

  • Hindari mengalokasikan memori dalam jumlah tinggi selama periode latensi rendah. Pemberitahuan memori rendah dapat disebabkan oleh pengumpulan sampah yang mengembalikan lebih sedikit objek.

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

  • Waspadai utas yang dapat dialokasikan. Karena pengaturan properti LatencyMode mencakup seluruh proses, pengecualian OutOfMemoryException dapat dihasilkan pada utas apa pun yang dialokasi.

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

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

Lihat juga