我目前正在 .NET 4.0 中工作我的第一个项目,它需要数千次字符串比较(我正在搜索目录,有时甚至在整个驱动器中搜索某些文件)。在大多数情况下,字符串非常短,因为我只查看文件路径,因此我刚刚使用 String.Contains() 来查看文件路径字符串是否包含我的针字符串。
但我想知道,正则表达式会是一个更好的主意吗?正则表达式在什么时候会比标准字符串比较更快?是基于被比较的字符串的长度还是被比较的字符串的数量?
最佳答案
它是可变的。比较性能是输入数据、用于比较的区域性、区分大小写和 CompareOptions
的复杂函数。 Regex 对象的实例化成本更高(除非它位于 Regex
缓存中),因此,如果您进行大量一次性比较,那么它的使用效果并不是很好,我发现它通常是比 IndexOf()
慢,但是 YMMV。
请记住,在使用 Contains/IndexOf 时,用户/线程运行所在的区域性将决定如何进行比较。这会对性能产生重大影响。并非所有文化都那么快。
不变文化是一种非常快速的文化。如果直接使用 CompareInfo
,而不是使用 String.IndexOf()
,它的速度仍然会更快。
CultureInfo.InvariantCulture.CompareInfo.IndexOf(..)
对做出正确选择有信心的唯一方法是进行基准测试。也就是说,除非您要转换许多兆字节的字符串,否则它不会对任何人产生重要的影响。正如 ChrisF 之前所说,在这种情况下,请关注可读/可维护的代码。
这是一篇关于充分利用正则表达式的好文章: Optimizing Regular Expression Performance
关于.net-4.0 - 什么时候应该使用 Regex 而不是 String.IndexOf()?或者 String.Contains()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3160172/