CA1869: Buforowanie i ponowne używanie wystąpień "JsonSerializerOptions"
Właściwości | Wartość |
---|---|
Identyfikator reguły | CA1869 |
Tytuł | Buforowanie i ponowne używanie wystąpień "JsonSerializerOptions" |
Kategoria | Wydajność |
Poprawka powodująca niezgodność lub niezgodność | Niezgodność |
Domyślnie włączone na platformie .NET 9 | Jako sugestia |
Przyczyna
Lokalne wystąpienie JsonSerializerOptions klasy jest używane raz jako options
argument wywołania Serialize lub Deserialize .
Opis reguły
Użycie lokalnego JsonSerializerOptions wystąpienia programu do serializacji lub deserializacji może znacznie obniżyć wydajność aplikacji, jeśli kod jest wykonywany wiele razy, ponieważ plik System.Text.Json wewnętrznie buforuje metadane związane z serializacją w podanym wystąpieniu.
Jak naprawić naruszenia
Możesz użyć wzorca pojedynczego, aby uniknąć tworzenia nowego JsonSerializerOptions wystąpienia za każdym razem, gdy kod jest wykonywany.
Przykład
Poniższy fragment kodu przedstawia dwa naruszenia 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 });
}
Poniższy fragment kodu naprawia naruszenia:
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);
}
Jeśli istnieją dalsze wywołania metody Serialize
lub Deserialize
s_writeOptions
, lub s_readOptions
powinny być ponownie używane, odpowiednio.
Kiedy pomijać ostrzeżenia
Można bezpiecznie pominąć to ostrzeżenie, jeśli wiesz, że kod nie utworzy wystąpienia wystąpienia wystąpienia JsonSerializerOptions więcej niż raz.
Pomijanie ostrzeżenia
Jeśli chcesz po prostu pominąć pojedyncze naruszenie, dodaj dyrektywy preprocesora do pliku źródłowego, aby wyłączyć, a następnie ponownie włączyć regułę.
#pragma warning disable CA1869
// The code that's violating the rule is on this line.
#pragma warning restore CA1869
Aby wyłączyć regułę dla pliku, folderu lub projektu, ustaw jego ważność na none
w pliku konfiguracji.
[*.{cs,vb}]
dotnet_diagnostic.CA1869.severity = none
Aby uzyskać więcej informacji, zobacz Jak pominąć ostrzeżenia dotyczące analizy kodu.