說到C#的Regex,談到最多的應該就是RegexOptions.Compiled這個東西,傳說中在匹配速度方面,RegexOptions.Compiled是可以提升匹配速度的,但在啟動速度上,使用了RegexOptions.Compiled情況下,通常會使啟動速度慢許多,據說最多是60倍。
進行一組測試,有測試數據,才有討論依據。
第一步,帖上測試硬件信息(呵呵,硬件有點爛:()
第二步,
a.測試在沒有使用RegexOptions.Compiled項時候的情況,隨意使用一些內容,然後循環一萬次實例化正則表達式對象來匹配這些內容。
代碼protected void Page_Load(object sender, EventArgs e)
{
WebClient webClient = new WebClient();
string content = webClient.DownloadString("http://www.cnblogs.com/tmyh/archive/2010/09/29/sqlindex_01.html");
Stopwatch watcher = new Stopwatch();
watcher.Start();
int i = 10000;
while (i > 0)
{
Regex rgx = new Regex("<div>.+?</div>", RegexOptions.IgnoreCase | RegexOptions.Singleline);
bool b1 = rgx.IsMatch(content);
Regex rgx2 = new Regex("<p>.+?</p>", RegexOptions.IgnoreCase | RegexOptions.Singleline);
bool b2 = rgx2.IsMatch(content);
i--;
}
Response.Write(string.Concat("<div>", watcher.Elapsed.TotalSeconds.ToString("f7"), "</div>"));
}
執行發現,內存使用情況為39,760K。輸出的執行時間為3.7954446秒(刷了幾次,取最快的那次)
b.測試在使用了RegexOptions.Compiled項時候的情況,隨意使用一些內容,然後循環一萬次實例化正則表達式對象來匹配這些內容。
代碼protected void Page_Load(object sender, EventArgs e)
{
WebClient webClient = new WebClient();
string content = webClient.DownloadString("http://www.cnblogs.com/tmyh/archive/2010/09/29/sqlindex_01.html");
Stopwatch watcher = new Stopwatch();
watcher.Start();
int i = 10000;
while (i > 0)
{
Regex rgx = new