天天躁日日躁狠狠躁AV麻豆-天天躁人人躁人人躁狂躁-天天澡夜夜澡人人澡-天天影视香色欲综合网-国产成人女人在线视频观看-国产成人女人视频在线观看

RegexOptions.Compiled的含義和使用

  曾經一位同事在寫程序時發現在利用正則表達式匹配文本時的效率很低。首先可以排除是正則表達式本身的問題,因為所使用的正則表達式是十分簡單的,匹配的文本量也不算大。檢查的時候去掉了RegexOptions.Compiled的選項之后,程序整體速度得到了很大的提升。

  這是因為誤解了RegexOptions.Compiled這個選項提供的功能。在正則引擎啟動正則表達式之前,需要做一些準備工作,這些準備工作包括檢查正則表達式是否符合格式規范,并將其轉化能夠實際應用的內部形式。在許多關于正則表達式的文檔中,將這一過程用compile來描述。然而在.NET中,這個過程實際上是以parsing來描述的。

  在.NET中,parsing是指在程序執行過程中,第一次遇到正則表達式時必須檢查它是否格式規范,并將其轉換為適于.NET正則引擎實際應用的內部形式。

  當指定RegexOptions.Compiled的時候,所提供的機制是告訴正則引擎,除了將正則表達式轉換為認定的內部形式外,還將其編譯(很多人會混淆這里的編譯和parsing的過程)為底層的MSIL(Microsoft Intermediate Language)代碼,在正則表達式實際應用時,可以由JIT(Just-In-Time)優化為更快的本地機器代碼。

  啟動這個選項究竟對性能產生了怎樣的影響,可以從三個方面來看。

  首先在啟動速度上,在不使用RegexOptions.Compiled會比較快,使用了RegexOptions.Compiled情況下,通常會使啟動速度慢許多,據說最多是60倍。

  在內存占用方面,使用RegexOptions.Compiled時,通常每個表達式會占用5KB~15KB的內存,更重要的是,在程序執行過程中,這塊內存是無法被釋放的。這里有時會帶來一些問題,因為Regex在.NET中作為對象被封裝,如果是多個進程或請求同時調用到這個代碼片段,可能會造成相同的正則表達式在重復占用了內存,這取決于程序具體的實現方式。

  在匹配速度方面,RegexOptions.Compiled是可以提升匹配速度的,但是因為有在啟動速度和內存占用方面帶來的額外開銷,所以除非是在需要匹配大量的文本和反復使用某正則表達式時,這種提升非常不明顯,而且在許多人誤用此選項的情況下,得到的結果反而是程序整體運行速度的下降。所以在非大量文本處理的情況下,如果對程序整體效率有嚴格要求,建議不要使用該選項。

  如果需要使用該選項,那么一個應該考慮的也是更好的方案應該是將要使用的正則對象封裝到一個DLL中,這將使最終的程序占用的內存更少,因為不必裝載使用RegexOptions.Compiled編譯正則表達式的包。另外,由于在封裝DLL時正則表達式已經編譯好了,裝載的速度也就得到了提升。附帶的一個好處就是這個包還可以提供給其他需要的程序員調用,而不是copy正則表達式的代碼。

  以上內容和分析適用于.NET Framework 2.0。

NET技術RegexOptions.Compiled的含義和使用,轉載需保留來源!

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

主站蜘蛛池模板: 无码AV精品一区二区三区 | 97超碰免费人妻中文 | 久久亚洲精品AV成人无 | 另类欧美尿交 | 国产高清在线露脸一区 | 欧美亚洲国产专区在线 | 国产成年人在线观看 | 国产麻豆福利AV在线观看 | 欧美国产精品久久久乱码 | 国产精品VIDEOS麻豆TUBE | 亚洲另类欧美综合在线 | 伊人久久国产 | 色吧.com| 亚洲国产精品热久久 | 久久精品视频15人人爱在线直播 | 顶级欧美不卡一区二区三区 | 亚洲蜜桃AV永久无码精品放毛片 | 美女的避毛| 自拍 偷拍 亚洲 经典 | 亚洲嫩草影院久久精品 | 日本 一二三 不卡 免费 | 久久中文字幕人妻AV熟女 | 国产小视频免费看 | 国产精品人妻午夜福利 | 欧美性色xo影院69 | 娇小萝被两个黑人用半米长 | 花蝴蝶高清影视视频在线播放 | 超碰免费视频公开观看 | 色就色综合 | 免费国产福利 | 女人高潮了拔出来了她什么感觉 | 艺术片 快播 | 亚洲成色爱我久久 | 美女扒开尿口让男生添动态图 | swag合集120部 | 国产三级在线免费 | 国产成人午夜精品免费视频 | 国产真实乱对白精彩 | 国产36d在线观看 | 第一次破女视频出血视频 | 日韩精品免费在线观看 |