采用四緩沖提高自繪界面的效率


做過自繪的朋友都知道,如果直接畫到窗口DC上,頻繁更新會導致窗口比較閃。所以大家都喜歡使用雙緩沖解決這個問題。(即先畫到內存DC,全部畫完了再一次復制到窗口DC上)。
在編寫DirectUI界面時,子控件並不是真實存在的窗口,只是直接畫到同一個窗口上的一些子區域。如果每一個子控件更新狀態(比如獲取焦點、鼠標熱點及按下等狀態)都重畫所有子控件,那效率就低了,采用GDIPlus時這個效率的區別更明顯,CPU占用率特別高。
為解決這個問題,我在編寫“彗星小助手”時采用了更多的緩存。只根據需要更新某一控件的狀態。

緩存A->保存整個窗口的背景(只在窗口尺寸改變時更新)
緩存B->在A的基礎上,畫出所有子控件
緩存C->復制B,復制當前重畫子控件(比如“正則調試”這個子控件)所占區域的背景(即A),再畫出子控件(正則調試)的最新狀態,最后復制到窗口DC(假設為D)。

這樣做,保存了更多GDI對象,內存占用會稍高,但是CPU占用大幅度降低,不會因為子控件過多而導致“卡”一下的現象。子控件越多越明顯。

在這里,包括窗口DC在內,一共采用了四個DC,或許應該叫四緩沖吧,呵呵。

示意圖如下:


注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2021 ITdaan.com