Was ist der schnellste Weg, um int in char umzuwandeln? Ich brauche einen schnelleren Weg, weil
%Vor%ist mein langsamster Teil im Programm. Ich habe mehrere verschiedene int-Werte, die in char konvertiert werden müssen. Mein Projekt ist sehr groß und ich kann meine Funktion nicht veröffentlichen. Deshalb poste ich diese Testfunktion.
Mein Code bisher.
%Vor% Wenn Sie einen schnellen Leistungstest zwischen Ihrem Convert.ToChar
-Ansatz und dem erwähnten Casting ausführen, finde ich 65535 Tests ( char.MaxValue
) :
Im besten Fall lief die Besetzung in etwa der Hälfte der Zeit für Convert.
Die Implementierung von Convert.ToChar
, wie sie in Referenzquelle zu finden ist, zeigt den Zeitkonsumenten:
Obwohl diese Überprüfungen sicherlich einen Zweck erfüllen, benötigen Ihre speziellen Anwendungsfälle, insbesondere in einer solchen performancekritischen Situation, diese möglicherweise nicht. Das liegt an dir.
Eine gute Alternative, um diese Prüfungen durchzusetzen, wäre die Verwendung von ushort
anstelle von int
. Offensichtlich ist das möglich oder nicht erreichbar, aber mit dem gleichen maximalen Wert, das bedeutet, dass Sie die Kompilierungszeit dafür bekommen, was Sie bisher von ToChar
abhängig gemacht haben.
Convert.ToChar
führt schließlich eine explizite Konvertierung als (char)value
durch, wobei Wert der Wert int
ist. Zuvor überprüft es, ob der Wert im Bereich 0 to 0xffff
liegt, und wirft einen OverflowException
, wenn dies nicht der Fall ist. Der Aufruf der zusätzlichen Methode, Wert- / Grenzprüfungen und OverflowException
können nützlich sein, aber wenn nicht, ist die Leistung besser, wenn Sie einfach (char)value
verwenden.
Dies stellt sicher, dass alles in Ordnung ist, während der Konvertierung, aber nehmen Sie sich etwas Zeit, während Sie das sicherstellen,
%Vor%Dies wird es konvertieren, ohne sicherzustellen, dass alles in Ordnung ist, also weniger Zeit,
%Vor%Zum Beispiel.
%Vor%ergibt:
(char) 122 ist z
HINWEIS
Nicht direkt mit der Frage verbunden, aber wenn Sie glauben, dass die Conversion langsam ist, könnten Sie etwas falsch machen. Die Frage ist, warum Sie das Los von int
in char
konvertieren müssen. Was Sie erreichen wollen. Es könnte einen besseren Weg geben.
Der schnellste Weg, im Gegensatz zu den anderen, besteht darin, überhaupt keinen Code auszuführen. In allen anderen Fällen ist Speicher reserviert für int
und Speicher für char
. Das Beste, was erreicht werden kann, ist einfach die int
in die char
Adresse zu kopieren.
Allerdings ist dieser Code 100% schneller, da überhaupt kein Code ausgeführt wird.
%Vor%Tags und Links c# performance converter char int