5

我已经读到,当您在应用程序中进行大量字符串比较并使用 ToLower 方法时,这种方法非常昂贵。我想知道任何人都可以向我解释它是多么昂贵。将不胜感激任何信息或解释。谢谢!

4

5 回答 5

11

另请参阅编写文化安全托管代码,这是为什么不使用ToLower().

特别是,请参阅土耳其语“I”部分 - 在我过去工作的地方,它造成了无穷无尽的问题......

如果当前的文化是土耳其语或阿塞拜疆语,呼叫"I".ToLower()将不会返回。"i"对此进行直接比较会导致问题。

于 2015-02-10T20:26:41.797 回答
9

除了其他答案中提到的那些之外,使用String.Compare(String, String, StringComparison)方法还有另一个优点:

您可以传递null值并仍然获得相对比较值。这使得编写字符串比较变得容易得多。

String.Compare(null, "some StrinG", StringComparison.InvariantCultureIgnoreCase);

从文档中:

一个或两个比较数可以为null。根据定义,任何字符串,包括空字符串 (""),都比较大于空引用;并且两个空引用相互比较相等。

于 2015-02-10T20:33:26.950 回答
7

这是昂贵的,因为新字符串是“制造的”。

将其与调用 Equals 进行比较,该重载要求进行不区分大小写的比较。这允许在识别出不匹配时立即终止比较,而不必创建新字符串。

于 2015-02-10T20:08:10.923 回答
3

每次调用 ToLower() 时,都会创建一个新的字符串副本(而不是就地更改大小写)。如果您有许多字符串或长字符串,这可能会很昂贵。

来自String.ToLower文档:

返回转换为小写的此字符串的副本。

于 2015-02-10T20:13:21.183 回答
1

正如有人已经回答的那样, ToLower() 将创建一个新的字符串对象,与使用“IgonoreCase”相比,这是额外的成本。如果这个 ToLower 被频繁触发,你最终会在你的堆中创建很多小对象,并且会增加垃圾收集时间,这会成为性能损失。

于 2019-02-14T19:49:55.267 回答