Bagikan melalui


CA1869: Cache dan gunakan kembali instans 'JsonSerializerOptions'

Properti Nilai
ID Aturan CA1869
Judul Cache dan gunakan kembali instans 'JsonSerializerOptions'
Golongan Performa
Perbaikan bersifat disruptif atau non-disruptif Non-disruptif
Diaktifkan secara default di .NET 8 Sebagai saran

Penyebab

Instans JsonSerializerOptions lokal digunakan sekali sebagai options argumen panggilan Serialize atau Deserialize .

Deskripsi aturan

Menggunakan instans JsonSerializerOptions lokal untuk serialisasi atau deserialisasi dapat secara substansial menurunkan performa aplikasi Anda jika kode Anda dijalankan beberapa kali karena System.Text.Json secara internal menyimpan metadata terkait serialisasi ke dalam instans yang disediakan.

Cara memperbaiki pelanggaran

Anda dapat menggunakan pola singleton untuk menghindari pembuatan instans baru JsonSerializerOptions setiap kali kode Anda dijalankan.

Contoh

Cuplikan kode berikut menunjukkan dua pelanggaran CA1869:

static string Serialize<T>(T value)
{
    JsonSerializerOptions jsonOptions = new()
    {
        WriteIndented = true
    };

    return JsonSerializer.Serialize(value, jsonOptions);
}

static T Deserialize<T>(string json)
{
    return JsonSerializer.Deserialize<T>(json, new JsonSerializerOptions { AllowTrailingCommas = true });
}

Cuplikan kode berikut memperbaiki pelanggaran:

private static readonly JsonSerializerOptions s_writeOptions = new()
{
    WriteIndented = true
};

private static readonly JsonSerializerOptions s_readOptions = new()
{
    AllowTrailingCommas = true
};

static string Serialize<T>(T value)
{
    return JsonSerializer.Serialize(value, s_writeOptions);
}

static T Deserialize<T>(string json)
{
    return JsonSerializer.Deserialize<T>(json, s_readOptions);
}

Jika ada panggilan lebih lanjut ke Serialize atau Deserialize, s_writeOptions atau s_readOptions harus digunakan kembali, masing-masing.

Kapan harus menekan peringatan

Aman untuk menekan peringatan ini jika Anda tahu bahwa kode Anda tidak akan membuat instans JsonSerializerOptions lebih dari sekali.

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 CA1869
// The code that's violating the rule is on this line.
#pragma warning restore CA1869

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

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

Untuk informasi selengkapnya, lihat Cara menyembunyikan peringatan analisis kode.