CA1821: Hapus penyelesai kosong
Properti | Nilai |
---|---|
ID Aturan | CA1821 |
Judul | Menghapus finalizer kosong |
Golongan | Performa |
Perbaikan bersifat disruptif atau non-disruptif | Non-disruptif |
Diaktifkan secara default di .NET 9 | Sebagai saran |
Penyebab
Jenis mengimplementasikan finalizer yang kosong, hanya memanggil finalizer jenis dasar, atau memanggil hanya metode yang dipancarkan secara kondisional.
Deskripsi aturan
Kapan pun Anda bisa, hindari finalizer karena overhead performa tambahan yang terlibat dalam melacak masa pakai objek. Pengumpul sampah menjalankan finalizer sebelum mengumpulkan objek. Ini berarti bahwa setidaknya dua koleksi diperlukan untuk mengumpulkan objek. Finalizer kosong menimbulkan overhead tambahan ini tanpa manfaat apa pun.
Cara memperbaiki pelanggaran
Hapus finalizer kosong. Jika finalizer diperlukan untuk penelusuran kesalahan, sertakan seluruh finalizer dalam #if DEBUG / #endif
arahan.
Kapan harus menekan peringatan
Jangan menyembunyikan pesan dari aturan ini.
Contoh
Contoh berikut menunjukkan finalizer kosong yang harus dihapus, finalizer yang harus diapit dalam #if DEBUG / #endif
arahan, dan finalizer yang menggunakan #if DEBUG / #endif
arahan dengan benar.
public class Class1
{
// Violation occurs because the finalizer is empty.
~Class1()
{
}
}
public class Class2
{
// Violation occurs because Debug.Fail is a conditional method.
// The finalizer will contain code only if the DEBUG directive
// symbol is present at compile time. When the DEBUG
// directive is not present, the finalizer will still exist, but
// it will be empty.
~Class2()
{
Debug.Fail("Finalizer called!");
}
}
public class Class3
{
#if DEBUG
// Violation will not occur because the finalizer will exist and
// contain code when the DEBUG directive is present. When the
// DEBUG directive is not present, the finalizer will not exist,
// and therefore not be empty.
~Class3()
{
Debug.Fail("Finalizer called!");
}
#endif
}