日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > C# >内容正文

C#

浅谈提升C#正则表达式效率

發(fā)布時間:2023/12/20 C# 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 浅谈提升C#正则表达式效率 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
?摘要:說到C#的Regex,談到最多的應(yīng)該就是RegexOptions.Compiled這個東西,傳說中在匹配速度方面,RegexOptions.Compiled是可以提升匹配速度的,但在啟動速度上,使用了RegexOptions.Compiled情況下,通常會使啟動速度慢許多,據(jù)說最多是60倍。

  說到C#的Regex,談到最多的應(yīng)該就是RegexOptions.Compiled這個東西,傳說中在匹配速度方面,RegexOptions.Compiled是可以提升匹配速度的,但在啟動速度上,使用了RegexOptions.Compiled情況下,通常會使啟動速度慢許多,據(jù)說最多是60倍。

  進(jìn)行一組測試,有測試數(shù)據(jù),才有討論依據(jù)。

  第一步,帖上測試硬件信息(呵呵,硬件有點爛:()

  第二步,

  a.測試在沒有使用RegexOptions.Compiled項時候的情況,隨意使用一些內(nèi)容,然后循環(huán)一萬次實例化正則表達(dá)式對象來匹配這些內(nèi)容。

代碼 protectedvoid 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>"));
}

  執(zhí)行發(fā)現(xiàn),內(nèi)存使用情況為39,760K。輸出的執(zhí)行時間為3.7954446秒(刷了幾次,取最快的那次)

  b.測試在使用了RegexOptions.Compiled項時候的情況,隨意使用一些內(nèi)容,然后循環(huán)一萬次實例化正則表達(dá)式對象來匹配這些內(nèi)容。

代碼 protectedvoid 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 | RegexOptions.Compiled);
bool b1 = rgx.IsMatch(content);

Regex rgx2
=new Regex("<p>.+?</p>", RegexOptions.IgnoreCase | RegexOptions.Singleline | RegexOptions.Compiled);
bool b2 = rgx2.IsMatch(content);

i
--;
}
Response.Write(
string.Concat("<div>", watcher.Elapsed.TotalSeconds.ToString("f7"), "</div>"));
}

  執(zhí)行發(fā)現(xiàn),內(nèi)存使用情況為42,956K。輸出的執(zhí)行時間為43.3090937秒(刷了幾次,取最快的那次)

  從a和b的測試中發(fā)現(xiàn),不妥當(dāng)?shù)厥褂么诉x項,效率是極其低下的,尤其如果在WEB程序上,如果這個頁面有大流量請求的話,那會有點不堪設(shè)想。我們在正常使用中,極大量文本處理的情況似乎比較少出現(xiàn),基本上不能體現(xiàn)出RegexOptions.Compiled的所在匹配速度優(yōu)勢,所以通常建議不使用此項。(當(dāng)然,在正常情況下,我們也不會在每個循環(huán)中都new一個正則表達(dá)式對象,我們可能會選擇static一個)

  第三步,使用傳說中的Regex.CompileToAssembly來編譯正則表達(dá)式,再進(jìn)行測試。這個,得自己寫個編譯小程序,帖上本人自己寫的一個。點擊下載

  與第二步相同的正則表達(dá)式Pattern,用這個工具生成dll后,引用到項目。測試執(zhí)行,發(fā)現(xiàn)執(zhí)行的內(nèi)存使用情況與第二步的a差不多,速度也相差不多。當(dāng)然,在這里,這種測試方案,可能看不出這種預(yù)編譯的正則表達(dá)式的效率優(yōu)點,事實上,它應(yīng)該能夠有更高的執(zhí)行效率與匹配速度,最好使用多線程與多請求來進(jìn)行測試。

  在此將其封裝到DLL中,這將使最終的程序占用的內(nèi)存更少,而不必裝載使用RegexOptions.Compiled編譯正則表達(dá)式的包,裝載的速度也就得到了提升,同時也擁有了RegexOptions.Compiled的匹配速度優(yōu)勢。另外,也提高了需要一直復(fù)用的正則表達(dá)式的復(fù)用率。缺點,就是比較麻煩,而且只有固定的正則表達(dá)式能夠這樣使用。(關(guān)于如何使用Regex.CompileToAssembly,似乎也沒多少能夠解說的,就三兩行代碼,下載便知)

  似乎并無深入談到原理,不過,也并不重要,我們只要經(jīng)過測試,知道怎么使用能夠更好就行了。在此,個人的建議是,通常都不要使用RegexOptions.Compiled,即使要在代碼中使用,也應(yīng)該使用static變量。

  如果真有那么大文本要用的時候,我相信,這個正則表達(dá)式也不可能是動態(tài)的,固定的正則,我們就使用Regex.CompileToAssembly來先編譯成DLL再引用到項目中,即能提供效率,也提高了復(fù)用率。

總結(jié)

以上是生活随笔為你收集整理的浅谈提升C#正则表达式效率的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 尤物视频在线观看国产 | 少妇特殊按摩高潮惨叫无码 | 中文字幕在线成人 | 18被视频免费观看视频 | 深夜小视频在线观看 | 色一情一区二区三区四区 | 直接看av的网站 | 在线一区二区观看 | 99riav国产精品视频 | 特级黄色网 | aaaaaav| 日韩精品久久久久久久酒店 | 91免费影片| 国产免费观看久久黄av片 | 伊人久久一区 | 在线观看av网页 | 欧美日韩成人一区二区三区 | 久久婷婷一区 | 在线日韩亚洲 | 潘金莲激情呻吟欲求不满视频 | 国产精品久久久久久免费免熟 | 日韩在线一卡 | 大胸美女啪啪 | 国产精品久久久久久久久久久久久久久久久久 | 亚洲久久在线观看 | 欧美久久久久久久久 | 福利视频免费观看 | 99碰碰 | 亚洲精选在线 | 99国产精品久久久久 | 在线视频污 | 性欧美4khd高清极品 | 黄色a级片视频 | 美国一区二区三区 | 国产做爰高潮呻吟视频 | 精品人妻一区二区色欲产成人 | 欧美成人三级 | 亚洲国产视频一区二区三区 | 在线毛片网站 | 日韩av免费看 | 亚洲精品1区2区 | 亚洲黄视频 | 亚洲中文字幕无码不卡电影 | 欧美一区二区三区免费看 | 免费观看色 | 精品国产一区二区三区久久久蜜月 | 日韩一级免费视频 | 葵司av电影 | 粉嫩av.com | 天堂俺去俺来也www久久婷婷 | 亚洲精品中文字幕在线观看 | 精品一区二区三区日韩 | 可以免费看的av毛片 | 激情四射综合网 | 日日弄天天弄美女bbbb | 久久五月网 | 欧美日韩a v| 国产美女无遮挡永久免费观看 | 国内黄色一级片 | 尤物在线观看视频 | 爱情岛论坛亚洲品质自拍视频 | 国产午夜视频在线 | 亚洲一区二区三区电影在线观看 | 名校风暴在线观看免费高清完整 | 91九色pron| 艳妇臀荡乳欲伦交换在线看 | 亚洲欧美乱日韩乱国产 | 97国产精品久久久 | 成人av高清在线观看 | 国产一区二区三区在线视频观看 | 日本涩涩视频 | 天天骑夜夜操 | 久久在线精品视频 | 色香欲综合网 | 久操国产| 日韩一区二区三区不卡视频 | 男人操女人的网站 | 国产免费成人 | 男女啊啊啊视频 | 永久免费看片 | 免费超爽大片黄 | 日韩av免费在线看 | 亚洲福利视频一区 | 老司机精品视频在线播放 | 丁香婷婷在线 | 欧美日韩一区二区久久 | 黄色va| 久久久久亚洲日日精品 | 色伊人影院 | 成人在线观看小视频 | 亚洲欧美在线成人 | 青青操原 | 好男人网站 | 天天操夜夜爱 | 亚洲综合网站 | 免费看欧美成人a片无码 | 色播av| 欧美| 美日韩免费 |