CA1861: Vermijd constante matrices als argumenten
Eigenschappen | Weergegeven als |
---|---|
Regel-id | CA1861 |
Titel | Vermijd constante matrices als argumenten |
Categorie | Prestaties |
Oplossing is brekend of niet-brekend | Niet-brekend |
Standaard ingeschakeld in .NET 9 | Als suggestie |
Oorzaak
Een constante matrix met letterlijke waarden wordt doorgegeven aan een methode via regelmatige aanroep of uitbreidingsmethode.
Beschrijving van regel
Constante matrices die als argumenten worden doorgegeven, worden niet opnieuw gebruikt wanneer ze herhaaldelijk worden aangeroepen, wat impliceert dat er telkens een nieuwe matrix wordt gemaakt. Als de doorgegeven matrix niet wordt gedempt binnen de aangeroepen methode, kunt u overwegen deze te extraheren naar een static readonly
veld om de prestaties te verbeteren.
Notitie
Als de aangeroepen methode de doorgegeven matrix muteert of als u niet zeker weet of de methode de matrix zou muteren, moet u de matrix niet uitpakken naar een static readonly
veld. Dit kan een belangrijke wijziging zijn. In dit geval is het beter om de waarschuwing te onderdrukken.
Schendingen oplossen
Extraheer constante matrices naar static readonly
velden als de doorgegeven matrix niet wordt gedempt binnen de aangeroepen methode.
In het volgende voorbeeld ziet u een schending van de regel:
// A method argument
string message = string.Join(" ", new[] { "Hello", "world!" });
' A method argument
Dim message As String = String.Join(" ", {"Hello", "world!"})
In het volgende voorbeeld ziet u hoe de schending van deze regel is opgelost door het argument uit te pakken in een static readonly
veld.
private static readonly string[] array = new[] { "Hello" , "world!" };
private string GetMessage()
{
return string.Join(" ", array);
}
Private Shared ReadOnly array As String() = {"Hello", "world!"}
Private Function GetMessage() As String
Return String.Join(" ", array)
End Function
Nu wordt de waarde van de matrix opgelost tijdens het compileren in plaats van tijdens runtime, waardoor code beter presteert.
Wanneer waarschuwingen onderdrukken
Een schending van deze regel onderdrukken als:
- De aanroep wordt slechts eenmaal uitgevoerd.
- De matrix kan worden gedempt binnen de aangeroepen methode of u weet niet zeker of deze zou worden gedempt.
- U maakt zich geen zorgen over de invloed van de prestaties van het maken van een constante matrix voor elke aanroep.
Een waarschuwing onderdrukken
Als u slechts één schending wilt onderdrukken, voegt u preprocessorrichtlijnen toe aan uw bronbestand om de regel uit te schakelen en vervolgens opnieuw in te schakelen.
#pragma warning disable CA1861
// The code that's violating the rule is on this line.
#pragma warning restore CA1861
Als u de regel voor een bestand, map of project wilt uitschakelen, stelt u de ernst none
ervan in op het configuratiebestand.
[*.{cs,vb}]
dotnet_diagnostic.CA1861.severity = none
Zie Codeanalysewaarschuwingen onderdrukken voor meer informatie.