Ho letto in CLR tramite C# di Jeffrey Richter che String.ToUpperInvariant()
è più veloce di String.ToLowerInvariant()
. Dice che questo è dovuto al fatto che FCL utilizza ToUpperInvariant per normalizzare le stringhe, quindi il metodo è ultra-ottimizzato. Eseguendo un paio di test rapidi sulla mia macchina, concordo sul fatto che lo ToUpperInvariant()
sia effettivamente leggermente più veloce.Perché ToUpperInvariant() è più veloce di ToLowerInvariant()?
La mia domanda è se qualcuno sa come la funzione è effettivamente ottimizzata a livello tecnico, e/o perché le stesse ottimizzazioni non sono state applicate a ToLowerInvariant()
pure.
Per quanto riguarda il "duplicato": La domanda proposta di "duplicare" in realtà non fornisce una risposta alla mia domanda. Comprendo i vantaggi dell'uso di ToUpperInvariant
anziché di ToLowerInvariant
, ma quello che vorrei sapere è come/perché ToUpperInvariant
ha prestazioni migliori. Questo punto non è affrontato nel "duplicato".
Sembra il lavoro per il tuo ildasm o decompilatore preferito. – Romoku
http://stackoverflow.com/questions/2801508/what-is-wrong-with-tolowerinvariant – Dennisch
Entrambi 'ToUpperInvariant()' e 'ToLowerInvariant()' finiscono per chiamare 'InternalChangeCaseString()', quindi la magia deve essere un po ' ottimizzazioni all'interno (o nei metodi chiamati da) quel metodo. –