Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
| Majątek | Wartość |
|---|---|
| Identyfikator reguły | CA2026 |
| Tytuł | Preferuj JsonElement.Parse ponad JsonDocument.Parse().RootElement |
| Kategoria | Niezawodność |
| Poprawka jest przełomowa lub nieprzełomowa | Non-breaking |
| Domyślnie włączone na platformie .NET 10 | Jako sugestia |
Przyczyna
Kod używa JsonDocument.Parse().RootElement do przetwarzania JSON na JsonElement.
Opis reguły
JsonElement.Parse jest wydajniejszy niż wywoływanie metody JsonDocument.Parse().RootElement. Typ JsonDocument implementuje IDisposable i wynajmuje tablice z ArrayPool<T> obiektu, co może prowadzić do przecieków pamięci lub zwiększonego nacisku na GC, jeśli dokument nie zostanie prawidłowo usunięty. Metoda JsonElement.Parse, wprowadzona w .NET 10, analizuje JSON bezpośrednio do JsonElement, eliminując te problemy, co czyni jego działanie bardziej wydajnym i mniej podatnym na błędy.
Jak naprawić naruszenia
Zastąp JsonDocument.Parse().RootElementwywołania na .JsonElement.Parse()
Przykłady
Poniższy fragment kodu przedstawia naruszenie ca2026:
public static void ProcessJsonViolation(string json)
{
JsonElement element = JsonDocument.Parse(json).RootElement;
//...
}
Public Sub ProcessJsonViolation(json As String)
Dim element As JsonElement = JsonDocument.Parse(json).RootElement
'...
End Sub
Poniższy fragment kodu naprawia naruszenie:
public static void ProcessJsonFixed(string json)
{
JsonElement element = JsonElement.Parse(json);
//...
}
Public Sub ProcessJsonFixed(json As String)
Dim element As JsonElement = JsonElement.Parse(json)
'...
End Sub
Kiedy pomijać ostrzeżenia
Nie pomijaj ostrzeżeń z tej reguły. Jeśli używasz platformy .NET 10 lub nowszej, użyj JsonElement.Parse() dla lepszej wydajności i zarządzania zasobami.
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 CA2026
// The code that's violating the rule is on this line.
#pragma warning restore CA2026
Aby wyłączyć regułę dla pliku, folderu lub projektu, ustaw jego ważność na none w pliku konfiguracji.
[*.{cs,vb}]
dotnet_diagnostic.CA2026.severity = none
Aby uzyskać więcej informacji, zobacz Jak pominąć ostrzeżenia dotyczące analizy kodu.