.NET AOP 性能比較

??在.NET中要實(shí)現(xiàn)AOP有多種辦法晚树,至少包含如下幾種:

  1. 微軟企業(yè)庫Microsoft Enterprise Library
  2. postsharp(收費(fèi))
  3. ContextBoundObject
  4. Castle.Core
  5. Remoting的RealProxy
  6. ...

對(duì)于第一種解藻,需要安裝較大的類庫,第二種收費(fèi)牢屋,因此這兩者使用相對(duì)沒那么多,本文只比較后面三種的性能情況跨释。

先看結(jié)果

三種方法分別使用AOP和非AOP得方式調(diào)用相同空方法1000000次的結(jié)果如下:

ContextBoundObject Proxy Castle
Original: 5399 4 4
Aop: 8420 1456 48

可以看出窗宇,性能差距是巨大的,為什么有這么大的差距呢侦另?接下來分析一下原理秩命。

ContextBoundObject

通過ContextBoundObject來實(shí)現(xiàn)AOP,其中有大約60%的時(shí)間花在GetCustomAttribute的反射上褒傅,另外40%則是MarshalByRefObject(ContextBoundObject的基類弃锐,實(shí)際上ContextBoundObject什么事情都沒做,只是單純的繼承了MarshalByRefObject)內(nèi)部上下文管理上殿托,它需要管理些啥呢拿愧?ContextBoundObject是一個(gè)上下文對(duì)象的基類,繼承自它的子類將被一個(gè)特別的上下文管理起來碌尔,這個(gè)上下文包括一系列的屬性集合或者規(guī)則,當(dāng)進(jìn)入或者離開上下文時(shí)券敌,將強(qiáng)制執(zhí)行規(guī)則唾戚。當(dāng)使用ContextBoundObject實(shí)現(xiàn)AOP時(shí),除了性能底下待诅,其必須繼承自ContextBoundObject叹坦,對(duì)于單繼承的語言來講可能帶來不便。

Proxy

Proxy實(shí)現(xiàn)AOP會(huì)利用到RealProxy和TransparentProxy卑雁,它們分別是干啥的呢募书?

TransparentProxy:在 CLR 中在 IL 層面最大程度扮演被代理的遠(yuǎn)端對(duì)象绪囱,從類型轉(zhuǎn)換到類型獲取,從字段訪問到方法調(diào)用莹捡。對(duì) CLR 的使用者來說 TP 和被其代理的對(duì)象完全沒有任何區(qū)別鬼吵,只有通過 RemotingServices.IsTransparentProxy 才能區(qū)分兩者的區(qū)別。

RealProxy:是提供給 CLR 使用者擴(kuò)展代理機(jī)制的切入點(diǎn)篮赢,通過從 RP 繼承并實(shí)現(xiàn) Invoke 方法齿椅,用戶自定義代理實(shí)現(xiàn)可以自由的處理已經(jīng)被從棧調(diào)用轉(zhuǎn)換為消息調(diào)用的目標(biāo)對(duì)象方法調(diào)用,如實(shí)現(xiàn)緩存启泣、身份驗(yàn)證涣脚、安全檢測(cè)、延遲加載等等寥茫。

使用Proxy來實(shí)現(xiàn)AOP其消耗主要來自TP和RP兩個(gè)對(duì)象的實(shí)例化以及“對(duì)象引用 -> TP -> RP -> 實(shí)際對(duì)象”的調(diào)用鏈遣蚀。

Castle

Castle的本質(zhì)是創(chuàng)建繼承原來類的代理類,重寫虛方法實(shí)現(xiàn)AOP功能纱耻。內(nèi)部通過大量的Reflect.Emit + OpCode編程來實(shí)現(xiàn)高性能的保證芭梯,可以在很多開源項(xiàng)目中找到Castle的身影。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末膝迎,一起剝皮案震驚了整個(gè)濱河市粥帚,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌限次,老刑警劉巖芒涡,帶你破解...
    沈念sama閱讀 221,198評(píng)論 6 514
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異卖漫,居然都是意外死亡费尽,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,334評(píng)論 3 398
  • 文/潘曉璐 我一進(jìn)店門羊始,熙熙樓的掌柜王于貴愁眉苦臉地迎上來旱幼,“玉大人,你說我怎么就攤上這事突委“芈保” “怎么了?”我有些...
    開封第一講書人閱讀 167,643評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵匀油,是天一觀的道長缘缚。 經(jīng)常有香客問我,道長敌蚜,這世上最難降的妖魔是什么桥滨? 我笑而不...
    開封第一講書人閱讀 59,495評(píng)論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上齐媒,老公的妹妹穿的比我還像新娘蒲每。我一直安慰自己,他們只是感情好喻括,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,502評(píng)論 6 397
  • 文/花漫 我一把揭開白布邀杏。 她就那樣靜靜地躺著,像睡著了一般双妨。 火紅的嫁衣襯著肌膚如雪淮阐。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,156評(píng)論 1 308
  • 那天刁品,我揣著相機(jī)與錄音泣特,去河邊找鬼。 笑死挑随,一個(gè)胖子當(dāng)著我的面吹牛状您,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播兜挨,決...
    沈念sama閱讀 40,743評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼膏孟,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了拌汇?” 一聲冷哼從身側(cè)響起柒桑,我...
    開封第一講書人閱讀 39,659評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎噪舀,沒想到半個(gè)月后魁淳,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,200評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡与倡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,282評(píng)論 3 340
  • 正文 我和宋清朗相戀三年界逛,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片纺座。...
    茶點(diǎn)故事閱讀 40,424評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡息拜,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出净响,到底是詐尸還是另有隱情少欺,我是刑警寧澤,帶...
    沈念sama閱讀 36,107評(píng)論 5 349
  • 正文 年R本政府宣布馋贤,位于F島的核電站狈茉,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏掸掸。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,789評(píng)論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望扰付。 院中可真熱鬧堤撵,春花似錦、人聲如沸羽莺。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,264評(píng)論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽盐固。三九已至荒给,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間刁卜,已是汗流浹背志电。 一陣腳步聲響...
    開封第一講書人閱讀 33,390評(píng)論 1 271
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留蛔趴,地道東北人挑辆。 一個(gè)月前我還...
    沈念sama閱讀 48,798評(píng)論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像孝情,于是被迫代替她去往敵國和親鱼蝉。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,435評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理箫荡,服務(wù)發(fā)現(xiàn)魁亦,斷路器,智...
    卡卡羅2017閱讀 134,693評(píng)論 18 139
  • 團(tuán)隊(duì)開發(fā)框架實(shí)戰(zhàn)—面向切面的編程 AOP 引言 軟件開發(fā)的目標(biāo)是要對(duì)世界的部分元素或者信息流建立模型羔挡,實(shí)現(xiàn)軟件系統(tǒng)...
    Bobby0322閱讀 4,153評(píng)論 4 49
  • 從三月份找實(shí)習(xí)到現(xiàn)在洁奈,面了一些公司,掛了不少婉弹,但最終還是拿到小米睬魂、百度、阿里镀赌、京東氯哮、新浪、CVTE商佛、樂視家的研發(fā)崗...
    時(shí)芥藍(lán)閱讀 42,271評(píng)論 11 349
  • 非暴力溝通的第一個(gè)要素是觀察喉钢。我們仔細(xì)觀察,正在發(fā)生的事情良姆,并清楚地說出觀察結(jié)果肠虽,非暴力溝通并不要求我們保持完全的...
    米米心臻閱讀 357評(píng)論 0 0
  • 想把我的故事告訴你,想把我聽到的故事告訴你韩玩,想聽你講給我的故事垒玲。 世間多有癡情男女,可攜手賞皓月找颓,可嬉戲于美景合愈,可...
    吟千尋閱讀 875評(píng)論 0 3