【发布时间】:2013-09-10 13:23:22
【问题描述】:
我在 CLR 中通过 Jeffrey Richter 的 C# 读到 String.ToUpperInvariant() 比 String.ToLowerInvariant() 快。他说这是因为 FCL 使用 ToUpperInvariant 来规范化字符串,所以该方法是超优化的。在我的机器上运行几个快速测试,我同意ToUpperInvariant() 确实稍微快一些。
我的问题是,是否有人知道该功能实际上是如何在技术层面上优化的,和/或为什么同样的优化也没有应用于 ToLowerInvariant()。
关于“重复”:提议的“重复”问题确实无法回答我的问题。我了解使用ToUpperInvariant 而不是ToLowerInvariant 的好处,但我想知道ToUpperInvariant 如何/为什么表现更好。 “重复”中没有提到这一点。
【问题讨论】:
-
看起来适合您友好的 ildasm 或最喜欢的反编译器。
-
ToUpperInvariant()和ToLowerInvariant()最终都调用了InternalChangeCaseString(),所以魔术一定是在该方法内(或在由该方法调用的方法中)进行了一些优化。 -
@MatthewWatson, Romuku - 在使用 ReSharper 反编译器查看 InternalChangeCaseString 时有效,这很有趣,因为我怀疑这两种方法最终可能会调用一些共享函数。然而,由于 InternalChangeCaseString 是直接在 CLR 中实现的,我想确切知道他们实施了哪些优化会导致这种行为的希望不大。
标签: c# string optimization clr normalization