Lev*_*lho 6 c# string clr optimization normalization
我通过C#读了杰弗里里希特的CLR,String.ToUpperInvariant()速度比String.ToLowerInvariant().他说这是因为FCL使用ToUpperInvariant来规范化字符串,因此该方法是超优化的.在我的机器上运行几个快速测试,我同意这ToUpperInvariant()确实稍微快一些.
我的问题是,如果有人知道该功能在技术层面上是如何实际优化的,和/或为什么同样的优化也没有被应用ToLowerInvariant().
关于"重复":提议的"重复"问题实际上并未提供我的问题的答案.我理解使用ToUpperInvariant而不是使用的好处ToLowerInvariant,但我想知道的是如何/为什么ToUpperInvariant表现更好.这一点未在"重复"中解决.
由于现在更容易阅读其实现的 CLR 源代码InternalChangeCaseString,我们可以看到它主要调用 Win32 函数LCMapStringEx。似乎没有关于传入参数与参数传入性能的注释或任何LCMAP_UPPERCASE讨论。调用使用一个标志,如果可能会导致编译器(或 JITter)更好的优化,但由于调用必须设置 ap/invoke 调用框架并且调用本身必须工作,所以我不确定很多那里节省了时间。LCMAP_LOWERCASEdwMapFlagsInternalChangeCaseStringisToUppertrueLCMapStringEx
也许该建议是其他一些实现的保留,但我看不到任何可以以某种方式提供显着速度优势的东西。
| 归档时间: |
|
| 查看次数: |
3000 次 |
| 最近记录: |