使用正则表达式的速度比IndexOf快

本文关键字:IndexOf 速度 正则表达式 | 更新日期: 2023-09-27 18:25:22

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

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

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

每秒大约有10个项目被处理。

使用正则表达式的速度比IndexOf快

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

不管怎样,如果字符串不是很大,那就不重要了,因为你不经常这样做。

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

这似乎与绳子的长度和效率有关。

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

你唯一确定的方法是为你的特定场景写一个测试。

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

Regex是一种复杂得多的机制,需要对整个字符串进行解析和检查。如果你的字符串很大,最好使用indexOf。

首先,每秒有10个项目,您可能甚至不需要思考性能。

在大多数情况下,IndexOf可能比regex更快。特别是如果您不使用预编译的regex。

它的性能也可能取决于所选择的字符串比较/区域性。我希望StringComparison.Ordinal是最快的。

为什么不使用System.Diagnostics.Stopwatch类进行实验并测量所用时间?http://msdn.microsoft.com/en-us/library/system.diagnostics.stopwatch.aspx

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

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

节省一点CPU时间是否有理由延长下一个人理解代码的时间?

正则表达式在较长字符串中更快似乎是正确的。我的例子是:在364kB的文件内容中搜索字符串"<产品";。移动起点以查找下一个和下一个,依此类推。但是,在整个值中找不到搜索到的字符串。

我使用了三个测试命令:

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

命令一(标准索引)需要~7500毫秒来搜索字符串命令二(带序数的indexof)需要~300毫秒!命令三(regex)需要约650毫秒(使用IgnoreCase选项约1000毫秒)。

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

总之,这似乎表明,搜索模式越大,RegEx的相对性能越好。