Ich lese in CLR via C# von Jeffrey Richter, dass String.ToUpperInvariant()
schneller ist als String.ToLowerInvariant()
. Er sagt, dies liegt daran, dass die FCL ToUpperInvariant verwendet, um Strings zu normalisieren, so dass die Methode ultra-optimiert ist. Ich mache ein paar schnelle Tests auf meiner Maschine, ich stimme zu, dass ToUpperInvariant()
tatsächlich etwas schneller ist.Warum ist ToUpperInvariant() schneller als ToLowerInvariant()?
Meine Frage ist, wenn jemand weiß, wie die Funktion tatsächlich auf einer technischen Ebene optimiert ist, und/oder warum die gleichen Optimierungen nicht auch auf ToLowerInvariant()
angewendet wurden.
In Bezug auf die „Duplikat“: Die vorgeschlagene „Duplikat“ Frage nicht wirklich eine Antwort auf meine Frage geben. Ich verstehe die Vorteile der Verwendung von ToUpperInvariant
anstelle von ToLowerInvariant
, aber was ich gerne wissen würde ist, wie/warum ToUpperInvariant
besser funktioniert. Dieser Punkt wird im "Duplikat" nicht angesprochen.
Sieht aus wie der Job für Ihre freundliche ildasm oder Lieblings-Decompiler. – Romoku
http://StackOverflow.com/Questions/2801508/what-is-wrong-with-tolowerinvariant – Dennisch
Sowohl "ToUpperInvariant()" als auch "ToLowerInvariant()" enden beim Aufrufen von 'InternalChangeCaseString()', also muss die Magie etwas sein Optimierungen innerhalb (oder in Methoden, die von dieser Methode aufgerufen werden). –