我已经读过,在您的应用程序中进行大量字符串比较并使用ToLower方法时,此方法非常昂贵。我想知道有谁可以向我解释它是多么昂贵。非常感谢任何信息或解释。谢谢!
答案 0 :(得分:8)
另请参阅writing culture-safe managed code,了解为何不使用ToLower()
。
特别是,请参阅土耳其语“I”部分 - 过去我工作的问题没有结束...
如果当前文化是土耳其语或阿塞拜疆语,则呼叫"I".ToLower()
将不会返回"i"
。对此进行直接比较会导致问题。
答案 1 :(得分:6)
使用String.Compare(String, String, StringComparison)方法还有另一个好处,除了在其他答案中提到的那些:
您可以传递null
值,但仍会获得相对比较值。这使得编写字符串比较变得更加容易。
String.Compare(null, "some StrinG", StringComparison.InvariantCultureIgnoreCase);
来自文档:
一个或两个比较可以是 null 。根据定义,任何字符串(包括空字符串(“”))都会比较大于空引用;和两个空引用比较相等。
答案 2 :(得分:5)
成本高昂,因为新的字符串是"制造"。
将其与调用相比较,比如,调用带有重载的Equals,请求不区分大小写的比较。一旦识别出不匹配,这就允许比较终止,而不必创建新的字符串。
答案 3 :(得分:2)
每次调用ToLower()时,都会创建一个新的字符串副本(而不是使案例更改为就地)。如果您有许多字符串或长字符串,这可能会很昂贵。
来自String.ToLower docs:
返回此字符串的副本,转换为小写。
答案 4 :(得分:0)
正如已经有人回答的那样,ToLower()将创建一个新的字符串对象,与使用“ IgonoreCase”相比,这是额外的花费。如果此ToLower频繁触发,您最终将在堆中创建许多小对象,并且将增加垃圾回收时间,这将成为性能损失。