[英]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.