加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 为什么ToUpperInvariant()比ToLowerInvariant()更快?

发布时间:2020-12-15 05:39:46 所属栏目:百科 来源:网络整理
导读:我通过C#by Jeffrey Richter在CLR中读到String.ToUpperInvariant()比String.ToLowerInvariant()更快.他说这是因为FCL使用ToUpperInvariant来规范化字符串,因此该方法是超优化的.在我的机器上运行几个快速测试,我同意ToUpperInvariant()确实稍微快一些. 我的
我通过C#by Jeffrey Richter在CLR中读到String.ToUpperInvariant()比String.ToLowerInvariant()更快.他说这是因为FCL使用ToUpperInvariant来规范化字符串,因此该方法是超优化的.在我的机器上运行几个快速测试,我同意ToUpperInvariant()确实稍微快一些.

我的问题是,是否有人知道该功能如何在技术层面上实际优化,和/或为什么相同的优化也未应用于ToLowerInvariant().

关于“重复”:提议的“重复”问题实际上并未提供我的问题的答案.我理解使用ToUpperInvariant而不是ToLowerInvariant的好处,但我想知道的是ToUpperInvariant如何/为什么表现更好.这一点未在“重复”中解决.

解决方法

由于它现在更容易 read the CLR source which implements InternalChangeCaseString,我们可以看到它主要调用Win32函数 LCMapStringEx.似乎没有关于dwMapFlags参数传递LCMAP_UPPERCASE与LCMAP_LOWERCASE的性能的说明或任何讨论.调用InternalChangeCaseString使用一个标志isToUpper,如果为true,可能会导致编译器(或JITter)更好地进行优化,但由于调用LCMapStringEx必须设置ap / invoke调用帧并且调用本身必须工作,我不是确保在那里节省了很多时间.

也许这个建议是其他一些实现的延续,但我看不到任何能够以某种方式提供显着速度优势的东西.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读