首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么ToUpperInvariant()比ToLowerInvariant()更快?

为什么ToUpperInvariant()比ToLowerInvariant()更快?
EN

Stack Overflow用户
提问于 2013-09-06 12:25:13
回答 1查看 4.1K关注 0票数 6

我从杰弗里·里希特( Jeffrey )的“CLR”(通过C# )中读到,String.ToUpperInvariant()String.ToLowerInvariant()快。他说这是因为FCL使用ToUpperInvariant来规范字符串,所以这个方法是超优化的。在我的机器上运行几个快速测试,我同意ToUpperInvariant()确实稍微快一些。

我的问题是,是否有人知道函数实际上是如何在技术级别上进行优化的,以及/或为什么没有将相同的优化应用于ToLowerInvariant()

关于“重复”的提议的“重复”问题实际上不能回答我的问题。我理解使用ToUpperInvariant而不是ToLowerInvariant的好处,但我想知道的是ToUpperInvariant如何/为什么表现得更好。这一点在“重复”中没有提到。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-03-01 01:44:56

因为现在更容易使用InternalChangeCaseString,所以我们可以看到它主要是调用Win32函数LCMapStringEx。对于传递LCMAP_UPPERCASELCMAP_LOWERCASE参数的性能,似乎没有任何注释或讨论。调用InternalChangeCaseString使用一个标志isToUpper,如果true可能导致编译器(或JITter)进行更好的优化,但是由于对LCMapStringEx的调用必须设置p/invoke框架,并且调用本身必须工作,所以我不确定在那里节省了很多时间。

也许这个建议是其他一些实现的阻碍,但我看不出有什么东西能提供显著的速度优势。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18657842

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档