我有一个正在运行的应用程序,它查看队列中的项目,然后根据某些关键字应用类别,然后将其插入数据库。
我使用IndexOf来确定是否存在某个关键字。
这是最理想的方式还是使用正则表达式更快?
大约每秒处理10个项目左右。
我有一个正在运行的应用程序,它查看队列中的项目,然后根据某些关键字应用类别,然后将其插入数据库。
我使用IndexOf来确定是否存在某个关键字。
这是最理想的方式还是使用正则表达式更快?
大约每秒处理10个项目左右。
仅仅查找一个关键字,使用 IndexOf
方法比使用正则表达式更快。正则表达式功能强大,但它们的优势在于灵活性,而不是原始速度。在简单字符串操作方面,它们无法超越字符串方法。
无论如何,如果字符串不是很长,这并不重要,因为你不需要经常执行该操作。
要确定最佳方案,唯一的方法是进行测试。但是如果做出一个有根据的猜测,那么取决于您正在测试的关键字数量、文本长度等因素。IndexOf 可能会更胜一筹。
要确保最佳解决方案,请为您特定的情况编写测试。
我怀疑这个 - indexOf
是一个非常简单的算法,只会在你的字符串中查找并返回它找到的第一次出现。
正则表达式是一种更复杂的机制,需要解析并针对整个字符串进行检查。如果你的字符串非常大,使用indexOf会更好。
正则表达式在较长的字符串中确实更快。
我的例子:搜索364kB文件内容中的字符串“<product ”。起始点被移动以查找下一个,然后是下一个,以此类推。但是,在整个值中未找到搜索的字符串。
我使用了三个测试命令:
i = value.IndexOf("<" & tag & " ", xstart)
i = value.IndexOf("<" & tag & " ", xstart, StringComparison.Ordinal)
i = Regex.IsMatch(value.Substring(xstart), "<" & tag & " ", RegexOptions.Singleline)
指令一(标准 indexof)需要大约 7500 毫秒来搜索字符串 指令二(使用序数的 indexof)只需约 300 毫秒! 指令三(正则表达式)需要约 650 毫秒(IgnoreCase 选项为 ~1000 毫秒)。
IndexOf
比正则表达式更快。尤其是如果您不使用预编译的正则表达式。StringComparison.Ordinal
是最快的。至少这位程序员发现使用IndexOf的代码更容易理解和快速!
节省一点CPU时间是否值得让下一个人花费更多时间来理解代码呢?
indexOf
,如果程序员想要理解它,不会给他带来严重的麻烦。 - F.P您可以在此链接中找到关于此查询的信息:http://ayende.com/blog/2930/regex-vs-string-indexof
总的来说,这似乎表明,搜索模式越大,相对而言 RegEx 的性能越好。