C# - 哪个更快:String.Contains() 还是 Regex.isMatch()?

4

可能是重复问题:
Regex.IsMatch vs string.Contains

哪个更快、更好,为什么?

两者之间的机制有何不同?

我需要从UserAgent中搜索一些值,大多数值可以在不使用通配符的情况下使用(例如,如果我想捕捉手机,我会搜索 iPhone 而不是 *iPhone* 通配符)。


我认为你可以尝试运行基准测试? - Julius F
不,我需要的答案不在那里。 - eugeneK
1
@daemonfire300,如果我只是想运行基准测试,我就不会问这个问题了。我认为有些人已经知道或确实知道每种方法背后的机制。 - eugeneK
如何进行搜索,无论是通过每个元素的一对一比较还是通过模式匹配,都在算法文献中得到了很好的覆盖。研究这些内容,并理解为什么优化的第一规则是“不要优化”;然后您将理解为什么这些评论和答案是这样的。 - Richard
1个回答

14

什么更快?

试着测量。但这是一个错误的问题,请看下面的解释。

更可取的选择

如果我想匹配一个固定字符串,String.Contains 就刚好满足我的需求。如果我需要模式匹配,则String.Contains 就无用了。

比较它们的性能是无关紧要的,因为它们执行完全不同的任务。首先使用正确的工具,只有在性能成为问题时才使用分析工具来确定代码中需要优化的热点部分。


如果正则表达式由于更好的算法而执行得更快,为什么我要使用Contains?我不需要它来进行小型搜索,但对于复杂的搜索,最低执行时间是紧急的。 - eugeneK
1
@eugeneK:正则表达式支持复杂的匹配逻辑(考虑如何实现正则表达式匹配)。直接进行字符串比较会很慢。 - Richard

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接