Dispatcher Queue性能分析 

一直想要寫一點東西,把自己在工作中遇到的東西分享給大家沈自,無奈水平有限,每每想寫的時候忌怎,就感覺寫的東西太過浮淺酪夷,同樣的東西不如其它人寫的有水平,假若自己再寫出來可能會給其它人帶來困惑捶索,加上自己語言組織能力不行,就懶得寫了辅甥,由于這兩天在分析UI刷新的性能問題燎竖,而今天也終于分析出性能損耗點,按捺不住心中的高興夏块,因此就想在這里給大家分享一下方法。

Dispatcher Queue性能分析

我相信脐供,學(xué)習(xí)過WPF人都會知道不能直接通過其它線程訪問UI控件借跪,原因是由地Windows操作系統(tǒng)使用的單線程的掏愁,基于消息處理的用戶界面,一次只能有一個線程訪問用戶界面沦泌,與任何輪換線程的交互都必須通過Windows消息泵來封送辛掠。而其它線程要訪問怎么辦,那只能通過消息封送了,常用的代碼如Dispatcher.BeginInvoke或Dispatcher.Invoke船侧。封送到UI線程進(jìn)行處理厅各。在控件與后臺邏輯頻繁交互的項目中的,這樣的封送代碼可能是相當(dāng)?shù)亩喽犹粒鴮τ诮缑鏀?shù)據(jù)加載慢這樣的問題,一一去查這些封送代碼顯然是相當(dāng)?shù)牟滑F(xiàn)實遮怜,那怎么辦鸿市?

其實,在我們封送消息到UI線程時焰情,封送的消息會以FIFO逐一進(jìn)行處理,當(dāng)然其還是一個優(yōu)先級的概念需要理解合敦。對于這樣的一個隊列验游,我們可以跟蹤加載到隊列每個任務(wù)的開始及結(jié)束時間,即可知道性能耗費點耕蝉,便可再跟據(jù)相關(guān)代碼進(jìn)行進(jìn)一步的分析。

MSDN中關(guān)于DispatcherHooks的定義
Func Description
DispatcherInactive 在調(diào)度程序沒有要處理的其他操作時發(fā)生
OperationAborted 中止操作時發(fā)生
OperationCompleted 完成操作時發(fā)生
OperationPosted 將操作發(fā)布到調(diào)度程序時發(fā)生
OperationPriorityChanged 在更改操作的優(yōu)先級時發(fā)生
OperationStarted 調(diào)用操作時發(fā)生

我們可以對Dispatcher.Hooks進(jìn)行上面這些事件的附加即可知道每個任務(wù)的進(jìn)度炒俱,詳細(xì)可研究Msdn。添加到Dispatcher Queue中的每個任務(wù)都用一個DispatcherOperation來表示推盛,這個類型有一個Name屬性,可以用來標(biāo)識具體是什么樣的任務(wù)耘成,由于這個屬性是internal類型的,所以獲取時需要進(jìn)行反射獲取撒会,代碼簡單如下:


PropertyInfo pro = typeof(DispatcherOperation).GetProperty("Name", BindingFlags.Instance | BindingFlags.GetProperty | BindingFlags.NonPublic);

打印出每個任務(wù)的Name屬性诵肛,就可以進(jìn)一步分析性能了。

由于添加到Dispatcher Queue中的任務(wù)是相當(dāng)?shù)亩嗾荩鏤I渲染蓄诽,Input事件等,可以把相關(guān)的任務(wù)都打印到txt中乙埃,然后搜索自己程序中的命名空間锯岖,即可找到自己程序添加相關(guān)任務(wù),使用NotePad++, 相當(dāng)好用米酬。

Ending!!!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末赃额,一起剝皮案震驚了整個濱河市叫确,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌飞盆,老刑警劉巖次乓,帶你破解...
    沈念sama閱讀 212,542評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件票腰,死亡現(xiàn)場離奇詭異,居然都是意外死亡杏慰,警方通過查閱死者的電腦和手機(jī)炼鞠,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,596評論 3 385
  • 文/潘曉璐 我一進(jìn)店門谒主,熙熙樓的掌柜王于貴愁眉苦臉地迎上來赃阀,“玉大人,你說我怎么就攤上這事姿现⌒けВ” “怎么了?”我有些...
    開封第一講書人閱讀 158,021評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長荤崇。 經(jīng)常有香客問我,道長术荤,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,682評論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮子库,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘仑嗅。我一直安慰自己,他們只是感情好鸵贬,可當(dāng)我...
    茶點故事閱讀 65,792評論 6 386
  • 文/花漫 我一把揭開白布恭理。 她就那樣靜靜地躺著郭变,像睡著了一般。 火紅的嫁衣襯著肌膚如雪周伦。 梳的紋絲不亂的頭發(fā)上专挪,一...
    開封第一講書人閱讀 49,985評論 1 291
  • 那天寨腔,我揣著相機(jī)與錄音率寡,去河邊找鬼。 笑死乾蛤,一個胖子當(dāng)著我的面吹牛捅僵,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播上荡,決...
    沈念sama閱讀 39,107評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼馒闷!你這毒婦竟也來了酪捡?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,845評論 0 268
  • 序言:老撾萬榮一對情侶失蹤窜司,失蹤者是張志新(化名)和其女友劉穎沛善,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體塞祈,經(jīng)...
    沈念sama閱讀 44,299評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡金刁,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,612評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了议薪。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片尤蛮。...
    茶點故事閱讀 38,747評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖斯议,靈堂內(nèi)的尸體忽然破棺而出产捞,到底是詐尸還是另有隱情,我是刑警寧澤哼御,帶...
    沈念sama閱讀 34,441評論 4 333
  • 正文 年R本政府宣布,位于F島的核電站赶促,受9級特大地震影響鸥滨,放射性物質(zhì)發(fā)生泄漏婿滓。R本人自食惡果不足惜凸主,卻給世界環(huán)境...
    茶點故事閱讀 40,072評論 3 317
  • 文/蒙蒙 一缩挑、第九天 我趴在偏房一處隱蔽的房頂上張望供置。 院中可真熱鬧芥丧,春花似錦擅耽、人聲如沸乖仇。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,828評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽蜀铲。三九已至蝙茶,卻和暖如春隆夯,著一層夾襖步出監(jiān)牢的瞬間蹄衷,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,069評論 1 267
  • 我被黑心中介騙來泰國打工耍属, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人领舰。 一個月前我還...
    沈念sama閱讀 46,545評論 2 362
  • 正文 我出身青樓,卻偏偏與公主長得像锉桑,于是被迫代替她去往敵國和親窍株。 傳聞我的和親對象是個殘疾皇子夹姥,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,658評論 2 350

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

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,848評論 25 707
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理祈搜,服務(wù)發(fā)現(xiàn)梁呈,斷路器官卡,智...
    卡卡羅2017閱讀 134,637評論 18 139
  • 一.資源搶奪 2> 資源搶奪解決方案 @sychronized{ } dispatch_barrier_async...
    藍(lán)心兒的藍(lán)色之旅閱讀 1,367評論 0 4
  • OC的理解與特性 OC作為一門面向?qū)ο蟮恼Z言毛秘,自然具有面向?qū)ο蟮恼Z言特性:封裝叫挟、繼承抹恳、多態(tài)适秩。它既具有靜態(tài)語言的特性...
    小樓昨夜有風(fēng)雨閱讀 567評論 0 0
  • 知道《犯罪心理》是因為前陣子在追劇抚官,《法醫(yī)秦明》钦听,連看五本小說倍奢,終于等來了網(wǎng)劇痪宰,還專門去微博關(guān)注了秦明的微博衣撬。又在...
    貓餅干閱讀 253評論 0 0