我有一个运行的应用程序,它会查看队列中的项目,然后根据某些关键字应用一个类别 - 然后将其插入到数据库中。
我正在使用IndexOf来确定是否存在某个关键字。
这是理想的方式还是RegEX会更快?
每秒约有10件商品被处理。
答案 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 的文件内容中搜索字符串“ 我使用了三个测试命令: 命令一(indexof standard)需要~ 7500 ms 来搜索字符串
命令二(indexof 与序数)需要 ~ 300 ms !
命令三(正则表达式)需要约 650 毫秒(约 1000 毫秒,使用 IgnoreCase 选项)。 i = value.IndexOf("<" & tag & " ", xstart)
i = value.IndexOf("<" & tag & " ", xstart, StringComparison.Ordinal)
i = Regex.IsMatch(value.Substring(xstart), "<" & tag & " ", RegexOptions.Singleline)
答案 8 :(得分:0)
您可以在此链接上找到有关此查询的信息:http://ayende.com/blog/2930/regex-vs-string-indexof
总之,似乎表明searchpattern越大,RegEx的表现越好。