Was ist der schnellste Weg, um int in char zu konvertieren?

7

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%     
Florian Neiss 13.03.2015, 10:03
quelle

3 Antworten

20

Wenn Sie einen schnellen Leistungstest zwischen Ihrem Convert.ToChar -Ansatz und dem erwähnten Casting ausführen, finde ich 65535 Tests ( char.MaxValue ) :

%Vor%

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:

%Vor%

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.

    
Matthew Haugen 13.03.2015, 10:18
quelle
18

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.

    
Coder of Code 13.03.2015 10:10
quelle
9

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%

Ссылка

    
Aron 13.03.2015 10:26
quelle

Tags und Links