Freigeben über


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.