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 9 | 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.