CA1859: Gebruik indien mogelijk betontypen voor verbeterde prestaties
Eigenschappen | Weergegeven als |
---|---|
Regel-id | CA1859 |
Titel | Gebruik indien mogelijk betontypen voor betere prestaties |
Categorie | Prestaties |
Oplossing is brekend of niet-brekend | Niet-brekend |
Geïntroduceerde versie | .NET 8 |
Standaard ingeschakeld in .NET 9 | Als suggestie |
Oorzaak
Code maakt gebruik van interfacetypen of abstracte typen, wat leidt tot onnodige interfaceaanroepen of virtuele aanroepen.
Beschrijving van regel
Deze regel raadt u aan het type specifieke lokale variabelen, velden, eigenschappen, methodeparameters en methode-retourtypen bij te voeren van interface- of abstracte typen naar concrete typen, indien mogelijk. Het gebruik van betontypen leidt tot een hogere kwaliteit gegenereerde code door overhead voor virtuele of interfaceverzending te minimaliseren en inlining mogelijk te maken.
Deze regel rapporteert alleen schendingen wanneer er virtuele aanroepen of interface-aanroepen zijn die daadwerkelijk kunnen worden vermeden met behulp van een concreet type.
Schendingen oplossen
Werk de typen bij zoals wordt aanbevolen door de regel. Over het algemeen heeft het wijzigen van het type geen effect op het gedrag van de code, maar verbetert de prestaties.
Opmerking
In het volgende codefragment ziet u een schending van CA1859:
abstract class A
{
public virtual void M() { }
}
sealed class B : A
{ }
internal class C
{
private readonly A _a = new B();
public void Trigger()
{
// This performs a virtual call because
// _a is defined as an abstract class.
_a.M();
}
}
Met het volgende codefragment wordt de schending opgelost:
abstract class A
{
public virtual void M() { }
}
sealed class B : A
{ }
internal class C
{
private readonly B _b = new B();
public void Trigger()
{
_b.M();
}
}
Wanneer waarschuwingen onderdrukken
Het is veilig om een waarschuwing te onderdrukken als de prestaties geen probleem zijn.
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 CA1859
// The code that's violating the rule is on this line.
#pragma warning restore CA1859
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.CA1859.severity = none
Zie Codeanalysewaarschuwingen onderdrukken voor meer informatie.