Bagikan melalui


CA1863: Gunakan 'CompositeFormat'

Properti Nilai
ID Aturan CA1863
Judul Menggunakan CompositeFormat
Golongan Performa
Perbaikan bersifat disruptif atau non-disruptif Non-disruptif
Diaktifkan secara default di .NET 8 Tidak

Penyebab

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

Deskripsi aturan

Sangat mahal untuk mengurai string format pada waktu proses. Aturan ini menemukan tempat dalam kode Anda di mana Anda dapat menyimpan dan menggunakan CompositeFormat instans sebagai argumen ke operasi pemformatan, daripada meneruskan string format asli. 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.