CA1859: Verwenden Sie nach Möglichkeit konkrete Typen, um die Leistung zu verbessern
Eigenschaft | Wert |
---|---|
Regel-ID | CA1859 |
Titel | Verwenden Sie nach Möglichkeit konkrete Typen, um die Leistung zu verbessern |
Kategorie | Leistung |
Fix führt oder führt nicht zur Unterbrechung | Nicht unterbrechend |
Eingeführt in Version | .NET 8 |
Standardmäßig in .NET 9 aktiviert | Als Vorschlag |
Ursache
Der Code verwendet Schnittstellentypen oder abstrakte Typen, die zu unnötigen Schnittstellenaufrufen oder virtuellen Aufrufen führen.
Regelbeschreibung
Diese Regel empfiehlt nach Möglichkeit ein Upgrade des Typs bestimmter lokaler Variablen, Felder, Eigenschaften, Methodenparameter und Methodenrückgabetypen von Schnittstellen- oder abstrakten Typen auf konkrete Typen. Die Verwendung konkreter Typen führt zu generiertem Code von höherer Qualität, indem virtueller Aufwand oder der Aufwand für die Verteilung von Schnittstellen minimiert und das Inlining aktiviert wird.
Diese Regel meldet Verstöße nur, wenn virtuelle Aufrufe oder Schnittstellenaufrufe vorhanden sind, die tatsächlich mit einem konkreten Typ vermieden werden können.
Behandeln von Verstößen
Upgraden Sie die Typen wie von der Regel empfohlen. Im Allgemeinen hat das Ändern des Typs keine Auswirkungen auf das Verhalten des Codes, verbessert aber die Leistung.
Beispiel
Der folgende Codeausschnitt zeigt eine Verletzung von 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();
}
}
Der folgende Codeausschnitt korrigiert die Verletzung:
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();
}
}
Wann sollten Warnungen unterdrückt werden?
Es ist ungefährlich, eine Warnung zu unterdrücken, wenn die Leistung kein Problem ist.
Unterdrücken einer Warnung
Um nur eine einzelne Verletzung zu unterdrücken, fügen Sie der Quelldatei Präprozessoranweisungen hinzu, um die Regel zu deaktivieren und dann wieder zu aktivieren.
#pragma warning disable CA1859
// The code that's violating the rule is on this line.
#pragma warning restore CA1859
Um die Regel für eine Datei, einen Ordner oder ein Projekt zu deaktivieren, legen Sie den Schweregrad in der Konfigurationsdatei auf none
fest.
[*.{cs,vb}]
dotnet_diagnostic.CA1859.severity = none
Weitere Informationen finden Sie unter Vorgehensweise: Unterdrücken von Codeanalyse-Warnungen.