CA1859: Använd konkreta typer när det är möjligt för bättre prestanda
Property | Värde |
---|---|
Regel-ID | CA1859 |
Title | Använd konkreta typer när det är möjligt för bättre prestanda |
Kategori | Prestanda |
Korrigeringen är icke-bakåtkompatibel | Icke-icke-bryta |
Introducerad version | .NET 8 |
Aktiverad som standard i .NET 9 | Som förslag |
Orsak
Koden använder gränssnittstyper eller abstrakta typer, vilket leder till onödiga gränssnittsanrop eller virtuella anrop.
Regelbeskrivning
Den här regeln rekommenderar att du uppgraderar typen av specifika lokala variabler, fält, egenskaper, metodparametrar och metodreturtyper från gränssnittstyper eller abstrakta typer till konkreta typer när det är möjligt. Användning av konkreta typer leder till kod som genereras av högre kvalitet genom att minimera kostnaderna för virtuella eller gränssnittsutskick och aktivera inlining.
Den här regeln rapporterar endast överträdelser när det finns virtuella anrop eller gränssnittsanrop som faktiskt kan undvikas med hjälp av en konkret typ.
Så här åtgärdar du överträdelser
Uppgradera de typer som rekommenderas av regeln. I allmänhet påverkar det inte kodens beteende att ändra typen, men det förbättrar dess prestanda.
Exempel
Följande kodfragment visar ett brott mot 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();
}
}
Följande kodfragment åtgärdar överträdelsen:
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();
}
}
När du ska ignorera varningar
Det är säkert att ignorera en varning om prestanda inte är ett problem.
Ignorera en varning
Om du bara vill förhindra en enda överträdelse lägger du till förprocessordirektiv i källfilen för att inaktivera och aktiverar sedan regeln igen.
#pragma warning disable CA1859
// The code that's violating the rule is on this line.
#pragma warning restore CA1859
Om du vill inaktivera regeln för en fil, mapp eller ett projekt anger du dess allvarlighetsgrad till none
i konfigurationsfilen.
[*.{cs,vb}]
dotnet_diagnostic.CA1859.severity = none
Mer information finns i Så här utelämnar du kodanalysvarningar.