使用正则表达式比IndexOf更快?

时间:2012-02-21 15:19:21

标签: c# .net regex performance indexof

我有一个运行的应用程序,它会查看队列中的项目,然后根据某些关键字应用一个类别 - 然后将其插入到数据库中。

我正在使用IndexOf来确定是否存在某个关键字。

这是理想的方式还是RegEX会更快?

每秒约有10件商品被处理。

9 个答案:

答案 0 :(得分:15)

对于仅查找关键字,IndexOf方法比使用正则表达式更快。正则表达式很强大,但它们的强大之处在于灵活性,而不是原始速度。它们不会在简单的字符串操作中击败字符串方法。

无论如何,如果字符串不是很大,那么它并不重要,因为你不经常这样做。

答案 1 :(得分:12)

http://ayende.com/blog/2930/regex-vs-string-indexof

似乎关于效率的字符串长度可能很重要。

答案 2 :(得分:3)

你确定的唯一方法就是测试它。但是做出有根据的猜测取决于你正在测试的关键词的数量,文本的长度等等.indexOf可能会赢。

您确切知道的唯一方法是为您的特定方案编写测试。

答案 3 :(得分:2)

我对此表示怀疑 - indexOf是一个非常简单的算法,它只会搜索你的字符串并返回它找到的第一个匹配项。

正则表达式是一种复杂得多的机制,需要根据整个字符串进行解析和检查。如果你的字符串非常大,那么你最好使用indexOf。

答案 4 :(得分:1)

首先,每秒10个项目你可能甚至不需要认为关于性能。

在大多数情况下,

IndexOf可能比正则表达式更快。特别是如果你不使用预编译的正则表达式。

它的性能可能还取决于所选的字符串比较/文化。我希望StringComparison.Ordinal最快。

答案 5 :(得分:1)

为什么不使用System.Diagnostics.Stopwatch类来实验和测量经过的时间? http://msdn.microsoft.com/en-us/library/system.diagnostics.stopwatch.aspx

在indexOf操作之前设置一个Stopwatch对象,然后测量它之后的经过时间。然后,将indexOf替换为正则表达式。最后,报告你的发现,以便我们也可以看到它们!

答案 6 :(得分:1)

至少这个程序员发现理解使用IndexOf的代码更快!

节省一点CPU时间是否足以让下一个人花时间理解代码?

答案 7 :(得分:1)

正则表达式在更长的字符串中更快似乎是正确的。 我的例子:在一个 364kB 的文件内容中搜索字符串“

我使用了三个测试命令:

         i = value.IndexOf("<" & tag & " ", xstart)

         i = value.IndexOf("<" & tag & " ", xstart, StringComparison.Ordinal)

         i = Regex.IsMatch(value.Substring(xstart), "<" & tag & " ", RegexOptions.Singleline)

命令一(indexof standard)需要~ 7500 ms 来搜索字符串 命令二(indexof 与序数)需要 ~ 300 ms ! 命令三(正则表达式)需要约 650 毫秒(约 1000 毫秒,使用 IgnoreCase 选项)。

答案 8 :(得分:0)

您可以在此链接上找到有关此查询的信息:http://ayende.com/blog/2930/regex-vs-string-indexof

总之,似乎表明searchpattern越大,RegEx的表现越好。