溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

如何分析.NET程序中的正則表達(dá)式性能問題

發(fā)布時(shí)間:2021-11-25 13:58:28 來源:億速云 閱讀:138 作者:柒染 欄目:編程語言

這篇文章將為大家詳細(xì)講解有關(guān)如何分析.NET程序中的正則表達(dá)式性能問題,文章內(nèi)容質(zhì)量較高,因此小編分享給大家做個(gè)參考,希望大家閱讀完這篇文章后對(duì)相關(guān)知識(shí)有一定的了解。

之前在web程序中錯(cuò)誤的使用了RegexOptions.Compiled 選項(xiàng),導(dǎo)致每個(gè)頁面打開整度慢了接近0.5秒..
因?yàn)槭窃趆ttpModule里過濾關(guān)鍵字,對(duì)性能比較敏感,做了個(gè)簡(jiǎn)單測(cè)試. 

Stopwatch w = new Stopwatch();            w.Start();            Regex r = new Regex(@".*", RegexOptions.Compiled );              Match m = r.Match("aaa");              if (m.Success)              {                  w.Stop();                  Response.Write(w.Elapsed.TotalSeconds.ToString("0.0000000"));                        }

不加RegexOptions.Compiled ,計(jì)時(shí)器顯示0.0000x,添加RegexOptions.Compiled 后計(jì)數(shù)器顯示0.00x
如果正則式寫的在復(fù)雜一些,那么僅編譯時(shí)間都要0.x秒了. 看來大部分應(yīng)用使用RegexOptions.Compiled 反而會(huì)降低性能,除非是很BT的應(yīng)用

.NET的正則表達(dá)使用NFA引擎,NFA引擎正則式的寫法對(duì)性能的很大. 

 Regex r = new Regex(@"(a|[^a]+)*^" );   string  str="111111111111111111111111111111111";  Match m = r.Match(str);               if (m.Success)               {                   Response.Write(w.Elapsed.TotalSeconds.ToString("0.0000000"));                               }


只要str長(zhǎng)度超過26基本上很匹配難完成.
以下這些都類似

(b|[^b]+)*^  (c|[^c]+)*^   (^|[^^]+)*(^|[^^]+)*^    (^|[^^]+|[^^]*)*^

看來正則的寫法對(duì)性能影響挺大的

關(guān)于如何分析.NET程序中的正則表達(dá)式性能問題就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI