簡體   English   中英

使用正則表達式是否比 IndexOf 更快?

[英]Is using a Regular Expression faster than IndexOf?

我有一個應用程序正在運行,它查看隊列中的項目,然后根據某些關鍵字應用一個類別 - 然后將其插入到數據庫中。

我正在使用 IndexOf 來確定某個關鍵字是否存在。

這是理想的方式還是 RegEX 會更快?

每秒處理大約 10 個項目。

對於僅查找關鍵字, IndexOf方法比使用正則表達式更快。 正則表達式很強大,但它們的力量在於靈活性,而不是原始速度。 它們不會在簡單的字符串操作中擊敗字符串方法。

無論如何,如果字符串不是很大,那應該沒有關系,因為您不經常這樣做。

http://ayende.com/blog/2930/regex-vs-string-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 ms 來搜索字符串 命令二(indexof with ordinal)需要~ 300 ms ! 命令三(正則表達式)需要約 650 毫秒(使用 IgnoreCase 選項時約 1000 毫秒)。

首先,對於每秒 10 個項目,您可能甚至不需要考慮性能。

在大多數情況下, IndexOf可能比 regex 快。 特別是如果您不使用預編譯的正則表達式。

它的性能也可能取決於所選的字符串比較/文化。 我希望StringComparison.Ordinal是最快的。

為什么不使用 System.Diagnostics.Stopwatch 類來試驗和測量經過的時間? http://msdn.microsoft.com/en-us/library/system.diagnostics.stopwatch.aspx

在 indexOf 操作之前設置一個 Stopwatch 對象,然后在它之后測量經過的時間。 然后,將 indexOf 換成正則表達式。 最后,報告您的發現,以便我們也可以看到它們!

至少這位程序員發現理解使用 IndexOf 的代碼更快!

節省一點 CPU 時間是否值得花費下一個人理解代碼的時間?

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

總之,它似乎表明搜索模式越大,RegEx 的性能就越好。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM