gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 21:50:32 24 4
gpt4 key购买 nike

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

我的问题是,是否有人知道函数在技术层面上实际上是如何优化的,和/或为什么同样的优化没有应用于 ToLowerInvariant()


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

最佳答案

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

也许该建议是对其他一些实现的保留,但我看不到任何可以以某种方式提供显着速度优势的东西。

关于c# - 为什么 ToUpperInvariant() 比 ToLowerInvariant() 快?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18657842/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com