簡體   English   中英

C#中Regex.Match的靜態版本與實例版本

[英]static vs. instance versions of Regex.Match in C#

我注意到一些使用靜態方法的代碼:

Regex.IsMatch([someRegexStr], [someInputStr])

是否值得用實例方法替換它? 喜歡:

private readonly Regex myRegex = new Regex([someRegexStr]);

...

myRegex.IsMatch([someInputStr]);

以下鏈接中的正則表達式優化建議之一: Jim Mischel的 正則表達式優化

為了在常用的正則表達式上獲得更好的性能,請構造一個Regex對象並調用其實例方法。

本文包含一些有趣的主題,例如緩存正則表達式和編譯正則表達式以及優化建議。

調用靜態Regex.IsMatch()方法時會發生一些初始處理 - 主要是驗證正則表達式並將其轉換為有限狀態機表示。

如果您計划多次運行相同的正則表達式匹配,則最好實例化Regex實例,並調用實例IsMatch()方法。 您可以使用RegexOptions.Compiled標志將epxression編譯為CLR字節碼,從而進一步提高性能。

從靜態調用創建的最后15個正則表達式內部表示被緩存。

我在談論這個以及“ .NET正則表達式如何真正起作用”中的內部工作

是的,特別是如果你可以使它成為一個編譯表達式。 以這種方式構造Regex對象的速度較慢,但​​用於獲勝的速度要快得多。

編輯:可能(可能是++)要快得多。 沒有要求CLI有一個很好的優化,但我猜測微軟當然是。 :d

private readonly Regex myRegex = new Regex([someRegexStr], RegexOptions.Compiled);

暫無
暫無

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

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