我已经读到,当您在应用程序中进行大量字符串比较并使用 ToLower 方法时,这种方法非常昂贵。我想知道任何人都可以向我解释它是多么昂贵。将不胜感激任何信息或解释。谢谢!
5 回答
另请参阅编写文化安全托管代码,这是为什么不使用ToLower()
.
特别是,请参阅土耳其语“I”部分 - 在我过去工作的地方,它造成了无穷无尽的问题......
如果当前的文化是土耳其语或阿塞拜疆语,呼叫"I".ToLower()
将不会返回。"i"
对此进行直接比较会导致问题。
除了其他答案中提到的那些之外,使用String.Compare(String, String, StringComparison)方法还有另一个优点:
您可以传递null
值并仍然获得相对比较值。这使得编写字符串比较变得容易得多。
String.Compare(null, "some StrinG", StringComparison.InvariantCultureIgnoreCase);
从文档中:
一个或两个比较数可以为null。根据定义,任何字符串,包括空字符串 (""),都比较大于空引用;并且两个空引用相互比较相等。
这是昂贵的,因为新字符串是“制造的”。
将其与调用 Equals 进行比较,该重载要求进行不区分大小写的比较。这允许在识别出不匹配时立即终止比较,而不必创建新字符串。
每次调用 ToLower() 时,都会创建一个新的字符串副本(而不是就地更改大小写)。如果您有许多字符串或长字符串,这可能会很昂贵。
来自String.ToLower文档:
返回转换为小写的此字符串的副本。
正如有人已经回答的那样, ToLower() 将创建一个新的字符串对象,与使用“IgonoreCase”相比,这是额外的成本。如果这个 ToLower 被频繁触发,你最终会在你的堆中创建很多小对象,并且会增加垃圾收集时间,这会成为性能损失。