我从杰弗里·里希特( Jeffrey )的“CLR”(通过C# )中读到,String.ToUpperInvariant()比String.ToLowerInvariant()快。他说这是因为FCL使用ToUpperInvariant来规范字符串,所以这个方法是超优化的。在我的机器上运行几个快速测试,我同意ToUpperInvariant()确实稍微快一些。
我的问题是,是否有人知道函数实际上是如何在技术级别上进行优化的,以及/或为什么没有将相同的优化应用于ToLowerInvariant()。
关于“重复”的:提议的“重复”问题实际上不能回答我的问题。我理解使用ToUpperInvariant而不是ToLowerInvariant的好处,但我想知道的是ToUpperInvariant如何/为什么表现得更好。这一点在“重复”中没有提到。
发布于 2016-03-01 01:44:56
因为现在更容易使用InternalChangeCaseString,所以我们可以看到它主要是调用Win32函数LCMapStringEx。对于传递LCMAP_UPPERCASE和LCMAP_LOWERCASE参数的性能,似乎没有任何注释或讨论。调用InternalChangeCaseString使用一个标志isToUpper,如果true可能导致编译器(或JITter)进行更好的优化,但是由于对LCMapStringEx的调用必须设置p/invoke框架,并且调用本身必须工作,所以我不确定在那里节省了很多时间。
也许这个建议是其他一些实现的阻碍,但我看不出有什么东西能提供显著的速度优势。
https://stackoverflow.com/questions/18657842
复制相似问题