Menjeda Pengumpulan Sampah untuk Prestasi Optimum
Dalam aplikasi .NET berprestasi tinggi yang mengendalikan data yang luas, churn objek boleh menjadi hambatan prestasi, terutamanya apabila digabungkan dengan overhed Kutipan Sampah (GC) yang ketara. Walau bagaimanapun, timbul tempoh singkat di mana kelewatan GC mesti dielakkan sama sekali.
.NET 4.6 memperkenalkan dua kaedah untuk menangani isu ini:
-
GC .TryStartNoGCRegion: Menggantung GC buat sementara waktu untuk kod tertentu blok.
-
GC.EndNoGCRegion: Sambung semula GC selepas blok kod selesai.
Penggunaan:
using System;
private static bool UseNoGC()
{
if (GC.TryStartNoGCRegion())
{
// Code that should not be interrupted by GC
...
GC.EndNoGCRegion();
return true;
}
return false;
}
Salin selepas log masuk
Alternatif:
-
Sistem. GC.Kumpul: Menggunakan GC secara manual sebelum tempoh kritikal boleh mengurangkan kemungkinan daripada kelewatan dalam tempoh tersebut. Walau bagaimanapun, tempoh penindasan GC tidak dijamin.
-
Pengurusan Sumber Manual: Melaksanakan antara muka IDisposable tersuai untuk kelas kritikal membolehkan kawalan manual ke atas jangka hayat objek, mengurangkan beban pada GC.
Meminimumkan GC Overhed:
-
Guna Semula Objek: Elakkan membuat dan membuang sejumlah besar objek berumur pendek.
-
Gunakan Jenis Nilai: Lebih suka jenis nilai (cth., struct) daripada jenis rujukan (cth., kelas) apabila boleh, sebagai ia biasanya tidak dijejaki oleh GC.
-
Elakkan Tatasusunan dan Koleksi Besar: Pisahkan koleksi besar kepada bahagian yang lebih kecil untuk meminimumkan overhed GC semasa mengumpulnya.
-
Gunakan Rujukan Lemah: Untuk objek yang tidak diperlukan serta-merta, pertimbangkan untuk menggunakan rujukan yang lemah untuk mengelakkan penyimpanan mereka dalam ingatan tanpa perlu.
-
Optimumkan Pengumpulan Sampah: Gunakan alatan pemprofilan prestasi untuk mengenal pasti kawasan di mana overhed GC tinggi dan optimumkan bahagian kod tersebut.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Meminimumkan Kelewatan Kutipan Sampah dalam Aplikasi .NET Berprestasi Tinggi?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!