CA1846: Előnyben részesítés AsSpan
Substring
Tulajdonság | Érték |
---|---|
Szabályazonosító | CA1846 |
Cím | Előnyben részesítés AsSpan Substring |
Kategória | Teljesítmény |
A javítás kompatibilitástörő vagy nem törik | Nem törés |
Alapértelmezés szerint engedélyezve a .NET 8-ban | Javaslatként |
Ok
Az egyik String.Substring túlterhelésre irányuló hívás eredménye egy olyan metódusnak lesz átadva, amely elfogadja a rendelkezésre álló túlterhelést ReadOnlySpan<Char>
.
Szabály leírása
Substring
lefoglal egy új string
objektumot a halomra, és végrehajtja a kinyert szöveg teljes másolatát. A sztringek kezelése számos program teljesítménybeli szűk keresztmetszete. Ha sok kis, rövid élettartamú sztringet állít elő egy gyakori elérési úton, az elegendő gyűjtési nyomást okozhat a teljesítmény befolyásolásához. A létrehozott Substring
O(n) másolatok akkor válnak relevánssá, ha az alsztringek nagyok lesznek. A Span<T> rendszer ezeket a teljesítményproblémák megoldásához hozta létre és ReadOnlySpan<T> típusok.
Számos, sztringeket elfogadó API túlterheléssel is rendelkezik, amelyek argumentumot ReadOnlySpan<System.Char>
fogadnak el. Ha ilyen túlterhelések állnak rendelkezésre, a teljesítmény javítása a hívás AsSpan
helyett Substring
.
Szabálysértések kijavítása
A szabály megsértésének kijavításához cserélje le a hívást string.Substring
az egyik bővítménymetely hívására MemoryExtensions.AsSpan .
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
Mikor kell letiltani a figyelmeztetéseket?
Ha a teljesítmény nem jelent problémát, nyugodtan el lehet tiltani a szabály figyelmeztetéseit.
Kapcsolódó információk
Visszajelzés
https://aka.ms/ContentUserFeedback.
Hamarosan elérhető: 2024-ben fokozatosan kivezetjük a GitHub-problémákat a tartalom visszajelzési mechanizmusaként, és lecseréljük egy új visszajelzési rendszerre. További információ:Visszajelzés küldése és megtekintése a következőhöz: