Share via


CA1846: Előnyben részesítés AsSpanSubstring

Tulajdonság Érték
Szabályazonosító CA1846
Cím Előnyben részesítés AsSpanSubstring
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