Share via


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.