CA1846: Voorkeur AsSpan
boven Substring
Eigenschappen | Weergegeven als |
---|---|
Regel-id | CA1846 |
Titel | Voorkeur AsSpan boven Substring |
Categorie | Prestaties |
Oplossing is brekend of niet-brekend | Niet-brekend |
Standaard ingeschakeld in .NET 9 | Als suggestie |
Oorzaak
Het resultaat van een aanroep naar een van de String.Substring overbelastingen wordt doorgegeven aan een methode met een beschikbare overbelasting die accepteert ReadOnlySpan<Char>
.
Beschrijving van regel
Substring
wijst een nieuw string
object toe aan de heap en voert een volledige kopie van de geëxtraheerde tekst uit. Het bewerken van tekenreeksen is een knelpunt voor de prestaties voor veel programma's. Door veel kleine, korte tekenreeksen op een dynamisch pad toe te wijzen, kan er voldoende verzamelingsdruk ontstaan om de prestaties te beïnvloeden. De O(n) kopieën die zijn gemaakt door Substring
relevant te worden wanneer de subtekenreeksen groot worden. De Span<T> en ReadOnlySpan<T> typen zijn gemaakt om deze prestatieproblemen op te lossen.
Veel API's die tekenreeksen accepteren, hebben ook overbelastingen die een ReadOnlySpan<System.Char>
argument accepteren. Wanneer dergelijke overbelastingen beschikbaar zijn, kunt u de prestaties verbeteren door te bellen AsSpan
in plaats van Substring
.
Schendingen oplossen
Als u een schending van deze regel wilt oplossen, vervangt u de aanroep van string.Substring
een aanroep naar een van de MemoryExtensions.AsSpan extensiemethoden.
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
Wanneer waarschuwingen onderdrukken
Het is veilig om waarschuwingen van deze regel te onderdrukken als de prestaties geen probleem zijn.