Share via


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.