CA1863: Gunakan 'CompositeFormat'

Properti Nilai
ID Aturan CA1863
Judul Menggunakan CompositeFormat
Kategori Performa
Perbaikan bersifat merusak atau tidak merusak Tidak terputus
Diaktifkan secara default di .NET 10 Tidak
Bahasa yang berlaku C# dan Visual Basic

Penyebab

Dipanggil kode String.Format(String, Object[]) atau StringBuilder.AppendFormat(String, Object[]) dengan string format static yang belum di-cache ke dalam instans CompositeFormat.

Deskripsi aturan

Memproses string format selama proses runtime itu mahal. Aturan ini menemukan lokasi dalam kode Anda di mana Anda dapat menyimpan (cache) dan menggunakan instans CompositeFormat sebagai argumen untuk operasi pemformatan, alih-alih meneruskan string format aslinya. Instans CompositeFormat menguraikan string format komposit saat dibuat, yang berarti "jalur panas" pemformatan string dapat dijalankan jauh lebih cepat.

Cara memperbaiki pelanggaran

Buat instans CompositeFormat dengan memanggil CompositeFormat.Parse(String) dan meneruskannya ke String.Format(IFormatProvider, CompositeFormat, Object[]) atau StringBuilder.AppendFormat(IFormatProvider, CompositeFormat, Object[]) alih-alih string format asli.

Contoh

Contoh berikut menunjukkan dua pelanggaran aturan:

class C
{
    private static readonly string StaticField = "Format one value: {0}";

    static void Main()
    {
        _ = string.Format(StaticField, 42);

        StringBuilder sb = new();
        sb.AppendFormat(StaticField, 42);
    }
}

Contoh berikut menunjukkan kode yang memperbaiki kedua pelanggaran:

class C
{
    private static readonly CompositeFormat StaticField = CompositeFormat.Parse("Format one value: {0}");

    static void Main()
    {
        _ = string.Format(null, StaticField, 42);

        StringBuilder sb = new();
        sb.AppendFormat(null, StaticField, 42);
    }
}

Kapan harus menekan peringatan

Aman untuk menekan diagnostik dari aturan ini jika performa tidak menjadi perhatian.

Menyembunyikan peringatan

Jika Anda hanya ingin menyembunyikan satu pelanggaran, tambahkan arahan praprosedur ke file sumber Anda untuk dinonaktifkan lalu aktifkan kembali aturannya.

#pragma warning disable CA1863
// The code that's violating the rule is on this line.
#pragma warning restore CA1863

Untuk menonaktifkan aturan untuk file, folder, atau proyek, atur tingkat keparahannya ke none dalam file konfigurasi.

[*.{cs,vb}]
dotnet_diagnostic.CA1863.severity = none

Untuk informasi selengkapnya, lihat Cara menyembunyikan peringatan analisis kode.