Heim >Backend-Entwicklung >C++ >Warum ist der „as'-Operator von C# in diesem Nullable-Integer-Summationstest langsamer als die herkömmliche Umwandlung?
Leistungsüberraschung mit „as“- und Nullable-Typen
Hintergrund
Das „as“ Der Operator in C# ermöglicht eine dynamische Typprüfung und sicheres Casting. Dies kann möglicherweise die Leistung gegenüber dem herkömmlichen „is“-Operator, gefolgt von einer Umwandlung, verbessern. In einem aktuellen Testfall wurden jedoch unerwartete Leistungsergebnisse beobachtet.
Test-App und Ergebnisse
Eine Test-App wurde entwickelt, um Ganzzahlen aus einem Objektarray mit Nullreferenzen zu summieren , String-Referenzen und geschachtelte Ganzzahlen. Die App nutzte drei Ansätze: „Cast“ (C# 1-Äquivalent), „As“ (unter Verwendung des „as“-Operators) und „LINQ“ (unter Verwendung der OfType()-Erweiterungsmethode). Überraschenderweise war der „Cast“-Ansatz deutlich schneller als der „As“-Ansatz, der wiederum etwas langsamer war als der „LINQ“-Ansatz.
Analyse
Die Der JIT-Compiler kann hocheffizienten Code für den „Cast“-Ansatz generieren, da er eine In-Memory-Wertkonvertierung nutzt. Das Objekt kann nur in eine Variable entpackt werden, die denselben Typ wie der geboxte Wert hat, was den Umwandlungsprozess vereinfacht.
Der „As“-Ansatz erfordert eine Konvertierung in Nullable
Der „LINQ“-Ansatz verwendet den „is“-Operator und eine generische Umwandlung durch die Hilfsfunktion JIT_Unbox(). Obwohl die Leistung etwas besser ist als der „As“-Ansatz, ist er aufgrund von ngen.exe-Optimierungen immer noch langsamer.
Fazit
Der „as“-Operator ist möglicherweise nicht immer vorhanden bieten Leistungsvorteile gegenüber dem „Cast“-Ansatz, insbesondere in leistungskritischen Situationen. Obwohl der „LINQ“-Ansatz eine praktikable Alternative darstellt, kann es auch zu Leistungseinschränkungen kommen. Daher ist es wichtig, den spezifischen Kontext zu berücksichtigen und die Kompromisse abzuwägen, bevor der optimale Ansatz gewählt wird.
Das obige ist der detaillierte Inhalt vonWarum ist der „as'-Operator von C# in diesem Nullable-Integer-Summationstest langsamer als die herkömmliche Umwandlung?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!