Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
CA1846: Raději než
| Vlastnost | Hodnota |
|---|---|
| ID pravidla | CA1846 |
| Název | Raději AsSpan než Substring |
| Kategorie | Výkon |
| Oprava způsobující chybu nebo chybu způsobující chybu | Nenarušující |
| Povoleno ve výchozím nastavení v .NET 10 | Jako návrh |
Příčina
Výsledek volání jednoho z String.Substring přetížení je předán metodě s dostupným přetížením, které přijímá ReadOnlySpan<Char>.
Popis pravidla
Substring přidělí nový string objekt v haldě a provede úplnou kopii extrahovaného textu. Manipulace s řetězci je kritickým bodem výkonu pro mnoho programů. Přidělení mnoha malých krátkodobých řetězců na horké cestě může vytvořit dostatečný tlak kolekce, aby ovlivnil výkon. Kopie O(n) vytvořené při Substring velké velikosti podřetězců se stanou relevantními. Tyto Span<T> problémy s výkonem byly vytvořeny a ReadOnlySpan<T> typy byly vytvořeny k vyřešení těchto problémů s výkonem.
Mnoho rozhraní API, která přijímají řetězce, má také přetížení, která přijímají ReadOnlySpan<System.Char> argument. Pokud jsou taková přetížení k dispozici, můžete zvýšit výkon voláním AsSpan místo Substring.
Jak opravit porušení
Chcete-li opravit porušení tohoto pravidla, nahraďte volání string.Substring voláním jedné z MemoryExtensions.AsSpan metod rozšíření.
using System;
public void MyMethod(string iniFileLine)
{
// Violation
int.TryParse(iniFileLine.Substring(7), out int x);
int.TryParse(iniFileLine.Substring(2, 5), out int y);
// Fix
int.TryParse(iniFileLine.AsSpan(7), out int x);
int.TryParse(iniFileLine.AsSpan(2, 5), out int y);
}
Imports System
Public Sub MyMethod(iniFileLine As String)
Dim x As Integer
Dim y As Integer
' Violation
Integer.TryParse(iniFileLine.Substring(7), x)
Integer.TryParse(iniFileLine.Substring(2, 5), y)
' Fix
Integer.TryParse(iniFileLine.AsSpan(7), x)
Integer.TryParse(iniFileLine.AsSpan(2, 5), y)
End Sub
Kdy potlačit upozornění
Pokud výkon není problém, je bezpečné potlačit upozornění z tohoto pravidla.