Beberapa aplikasi sangat peka jeda (latency-sensitive), misalnya sistem trading atau perenderan real-time. Untuk mereka, .NET menyediakan GCLatencyMode, yaitu kendali kasar atas seberapa agresif GC boleh berjalan. Mode ini diubah saat proses berjalan lewat GCSettings.LatencyMode, sehingga kita bisa mengetatkan latensi hanya pada bagian aplikasi yang membutuhkan.
Daftar Mode #
| Mode | Perilaku | Cocok untuk |
|---|---|---|
| Interactive | koleksi generatif dengan background GC | aplikasi umum, bawaan |
| Batch | koleksi lebih jarang, jeda lebih besar namun lebih sedikit | batch job tanpa interaksi |
| SustainedLowLatency | menahan koleksi gen2 blocking | fase penting yang panjang |
| NoGCRegion | menghentikan GC selama blok tertentu | bagian paling kritis, durasi pendek |
Contoh: Mengubah Mode Saat Berjalan #
Console.WriteLine($"Mode awal : {GCSettings.LatencyMode}");
GCSettings.LatencyMode = GCLatencyMode.SustainedLowLatency;
Console.WriteLine($"Mode baru : {GCSettings.LatencyMode}");Output yang Dihasilkan:
Mode awal : Interactive
Mode baru : SustainedLowLatencyMari kita bedah baris demi baris:
GCSettings.LatencyModepertama: hasilInteractiveadalah mode bawaan workstation GC dengan background GC aktif.- Penugasan
GCLatencyMode.SustainedLowLatency: kita meminta GC menahan koleksi generasi 2 blocking dan koleksi LOH selama fase ini berlangsung. GCSettings.LatencyModekedua: hasilSustainedLowLatencymembuktikan mode berlaku seketika tanpa perlu memulai ulang proses.
Batas dan Risiko Tiap Mode #
SustainedLowLatency tidak menahan koleksi generasi 0 dan 1; koleksi muda tetap berjalan karena diperlukan agar heap tidak meluap. Mode ini menunda pekerjaan berat, bukan menghapusnya, sehingga memori tetap harus dijaga. Mode NoGCRegion diaktifkan lewat GC.TryStartNoGCRegion(totalSize): GC berjanji tidak mengklaim apa pun selama alokasi masih muat dalam totalSize, dan mode berakhir lewat GC.EndNoGCRegion(). Bila anggaran terlampaui, runtime memanggil GC penuh meskipun kita belum selesai, dan panggilan EndNoGCRegion gagal dengan exception.