Heim >Backend-Entwicklung >C++ >Bietet der „as'-Operator bei Nullable-Typen in C# immer Leistungsvorteile gegenüber „is'?
In Kapitel 4 von C# in Depth werden Nullable-Typen und der „as“-Operator besprochen. Insbesondere besteht die Erwartung, dass die Verwendung von „as“ zur Typprüfung die Leistung gegenüber herkömmlichen „is“-Prüfungen und -Umwandlungen verbessern kann, da dadurch der Prozess auf eine einzige Typprüfung und Wertprüfung vereinfacht wird. Es wurde jedoch ein überraschendes Ergebnis beobachtet.
Um die Leistung zu bewerten, wurde ein Benchmark-Test durchgeführt, bei dem ganze Zahlen innerhalb eines Objektarrays summiert wurden, das zahlreiche Null- und String-Referenzen enthielt . Der Test hat die Ausführungszeit der folgenden Codefragmente gemessen:
Zum Erstaunen des Forschers übertraf der C#-1-Code sowohl den „as“-Code als auch den LINQ-Code deutlich.
Die Leistungsdiskrepanz ist auf folgende Faktoren zurückzuführen:
JIT Compiler-Optimierung für „is“ und Casting:
Der „is“-Operatortest und die anschließende Umwandlung können durch den JIT-Compiler optimiert werden, was zu hocheffizientem Maschinencode führt, der mit einer minimalen Anzahl von Anweisungen ausgeführt wird. Diese Optimierung ist möglich, weil der geboxte Werttyp ohne Wertkonvertierungen oder Kopieren direkt in eine Variable desselben Typs entboxt werden kann.
Komplexität der Konvertierung in Nullable
Umwandeln in int? Die Verwendung von „as“ erfordert einen komplexeren Konvertierungsprozess, da sich die Wertdarstellung der geschachtelten Ganzzahl vom Speicherlayout von Nullable
Unerwartetes Verhalten von LINQ:
The OfType ()-Erweiterungsmethode in LINQ verwendet auch den „is“-Operator und die Hilfsfunktion JIT_Unbox(). Allerdings war seine Leistung mit der „as“-Umwandlung in Nullable
Während der „as“-Operator eine praktische Möglichkeit zur Typprüfung und zur Verarbeitung von Nullable-Werten bietet, sind seine Leistungsmerkmale unten aufgeführt Bestimmte Szenarien entsprechen möglicherweise nicht immer den Erwartungen. Der optimierte Code, der für „ist“ und das Umwandeln in C# 1 generiert wird, bleibt in Fällen mit zahlreichen Unboxing-Vorgängen deutlich schneller, was unterstreicht, wie wichtig es ist, bei der Auswahl von Codierungstechniken Auswirkungen auf die Leistung zu berücksichtigen.
Das obige ist der detaillierte Inhalt vonBietet der „as'-Operator bei Nullable-Typen in C# immer Leistungsvorteile gegenüber „is'?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!