CA1869: JsonSerializerOptions-exemplaren cachen en hergebruiken
Eigenschappen | Weergegeven als |
---|---|
Regel-id | CA1869 |
Titel | JsonSerializerOptions-exemplaren in de cache opslaan en opnieuw gebruiken |
Categorie | Prestaties |
Oplossing is brekend of niet-brekend | Niet-brekend |
Standaard ingeschakeld in .NET 9 | Als suggestie |
Oorzaak
Een lokaal exemplaar van JsonSerializerOptions wordt eenmaal gebruikt als het options
argument van een Serialize of Deserialize aanroep.
Beschrijving van regel
Het gebruik van een lokaal exemplaar van JsonSerializerOptions serialisatie of deserialisatie kan de prestaties van uw toepassing aanzienlijk verminderen als uw code meerdere keren wordt uitgevoerd omdat System.Text.Json intern serialisatiegerelateerde metagegevens in het opgegeven exemplaar in de cache opneemt.
Schendingen oplossen
U kunt het singleton-patroon gebruiken om te voorkomen dat er steeds een nieuw JsonSerializerOptions exemplaar wordt gemaakt wanneer uw code wordt uitgevoerd.
Opmerking
In het volgende codefragment ziet u twee schendingen van 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 });
}
Met het volgende codefragment worden de schendingen opgelost:
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);
}
Als er verdere aanroepen naar Serialize
of Deserialize
, s_writeOptions
of s_readOptions
opnieuw moeten worden gebruikt, respectievelijk.
Wanneer waarschuwingen onderdrukken
Het is veilig om deze waarschuwing te onderdrukken als u weet dat uw code meer dan één keer een JsonSerializerOptions-exemplaar zal instantiëren.
Een waarschuwing onderdrukken
Als u slechts één schending wilt onderdrukken, voegt u preprocessorrichtlijnen toe aan uw bronbestand om de regel uit te schakelen en vervolgens opnieuw in te schakelen.
#pragma warning disable CA1869
// The code that's violating the rule is on this line.
#pragma warning restore CA1869
Als u de regel voor een bestand, map of project wilt uitschakelen, stelt u de ernst none
ervan in op het configuratiebestand.
[*.{cs,vb}]
dotnet_diagnostic.CA1869.severity = none
Zie Codeanalysewaarschuwingen onderdrukken voor meer informatie.