我通过C#by Jeffrey Richter在CLR中读到String.ToUpperInvariant()
比String.ToLowerInvariant()
更快。他说这是因为FCL使用ToUpperInvariant来规范化字符串,因此该方法是超优化的。在我的机器上运行几个快速测试,我同意ToUpperInvariant()
确实稍快一些。
我的问题是,是否有人知道该功能在技术层面上是如何实际优化的,以及/或为什么同样的优化也未应用于ToLowerInvariant()
。
关于"重复" 建议的"重复"问题真的没有提供我的问题的答案。我理解使用ToUpperInvariant
代替ToLowerInvariant
的好处,但我想知道的是ToUpperInvariant
如何/更好地表现。这一点未在"复制"。
答案 0 :(得分:3)
由于read the CLR source which implements InternalChangeCaseString
现在更容易了,我们可以看到它主要调用Win32函数LCMapStringEx
。对LCMAP_UPPERCASE
参数传递LCMAP_LOWERCASE
与dwMapFlags
的效果似乎没有任何说明或讨论。调用InternalChangeCaseString
使用标记isToUpper
,如果true
可能导致编译器(或JITter)更好地进行优化,但由于调用LCMapStringEx
必须设置ap /调用呼叫帧并且呼叫本身必须工作,我不确定那里有很多时间被保存。
也许这个建议是其他一些实施方案的延续,但我无法看到任何能够以某种方式提供显着速度优势的东西。