精品国产一级毛片大全,毛片一级在线,毛片免费观看的视频在线,午夜毛片福利

我要投稿 投訴建議

基于NET的雙緩沖技術(shù)論文

時間:2021-05-05 13:05:07 畢業(yè)論文范文 我要投稿

基于NET的雙緩沖技術(shù)論文

  通常在圖形應(yīng)用程序開發(fā)過程中,經(jīng)常會遇到圖形顯示時屏幕不停閃爍的現(xiàn)象。畫面要產(chǎn)生動態(tài)效果,編程時要在視圖中進(jìn)行貼圖,并不斷刷新重繪,但是刷新頻率過高,就會出現(xiàn)閃屏的現(xiàn)象。又或者是實時數(shù)據(jù)顯示,數(shù)據(jù)不斷更新,數(shù)據(jù)所在的控件也需要不斷地刷新,這樣也會出現(xiàn)閃屏的現(xiàn)象。因此,閃屏這個問題嚴(yán)重地影響了用戶的體驗。

基于NET的雙緩沖技術(shù)論文

  針對這個問題有一些解決辦法:刷新特定的矩形區(qū)域、頁面切換、雙緩沖等。但在一般情況下,開發(fā)人員會選擇雙緩沖技術(shù),因為適用范圍廣泛,不過需要較多的內(nèi)存。

  1 閃屏

  閃屏現(xiàn)象出現(xiàn)的可能原因:為了維持窗口的正常顯示,每次都需要調(diào)用Paint事件進(jìn)行重繪操作刷新畫面。雖然窗口在刷新過程中會使所有圖元重繪,不過圖元的重繪并不引發(fā)Paint事件,因此窗口刷新時只會調(diào)用一次Paint事件。在窗口刷新過程中,重繪的圖元都會馬上顯示到窗口,只要有圖元的位置,就會有圖元的更替刷新,當(dāng)圖元較多數(shù)量時,圖元更替刷新的時間存在肉眼可辨的時差時,就會導(dǎo)致閃爍現(xiàn)象出現(xiàn);當(dāng)圖元數(shù)量較少時,窗體重圖元更替刷新的位置也不多,窗口閃爍現(xiàn)象并不會很嚴(yán)重;隨著圖元數(shù)量的增加,繪圖窗口每次刷新引起的圖元重繪數(shù)量也會增加,窗口刷新的位置分布就更加廣泛,閃爍現(xiàn)象就會越來越嚴(yán)重。又或者是因為窗口刷新時間間隔小于圖元顯示到窗口所耗費的時間,因此在對圖元進(jìn)行鼠標(biāo)跟蹤繪制操作,抑或是對圖元進(jìn)行變形操作,由于調(diào)用Paint事件次數(shù)大量增加,窗口刷新次數(shù)也同時增加,即使窗口刷新時所有圖元的更替刷新沒有時間差異,也會因為延時關(guān)系導(dǎo)致閃爍現(xiàn)象。

  2 雙緩沖技術(shù)

  2.1 基本思想

  Windows的重繪窗體操作一般分為3個階段:

  第一階段,背景清除,通過Windows的操作系統(tǒng)級背景刷清除重繪窗體上的無效區(qū)域。

  第二階段,背景繪制,通過窗體的受保護方法OnPaint-Background完成窗體背景繪制,當(dāng)然也可以通過重寫該方法進(jìn)行自定義窗體背景的操作。

  第三階段,圖形繪制,通過窗體的受保護方法OnPaint完成圖形繪制,然后引發(fā)Paint事件。3個階段的操作全完成后,Windows窗體的繪圖才算真正完成。而雙緩沖技術(shù)就是將窗體重繪過程的3個階段合為一次操作,從而實現(xiàn)圖形閃爍現(xiàn)象的消除。具體實現(xiàn)方法是先在一塊內(nèi)存(后端緩沖區(qū))中完成重繪窗體的3個階段,然后再將繪制好的圖形從內(nèi)存中拷貝到顯存中,如圖1所示,由于在屏幕上只執(zhí)行了一次顯示圖形的操作,因此用戶觀察不到窗體重繪的中間畫面,從而消除了圖形的閃爍。

  2.2 實現(xiàn)方法

  2.2.1 利用默認(rèn)雙緩沖

  利用默認(rèn)雙緩沖的方法有兩種,第一種也就是最簡單的便是將.NetFramework中的Double Buffered屬性設(shè)置為true:this.DoubleBuffeed=true;

  第二種方法便是通過SetStyle為Windows窗體和Windows控件啟用默認(rèn)的雙緩沖。在.Net框架2.0以上版本中設(shè)置參數(shù)屬性如下: Double Buffer和Double Buffer參數(shù)設(shè)為true;而UserPaint設(shè)為true表示控件自行負(fù)責(zé);All Painting lnWmPaint設(shè)為true表示禁止擦除背景。

  2.2.2 自定義雙緩沖

  .netframework中的類Buffered Graphics Context獨立管理和分配圖形緩沖區(qū)。應(yīng)用程序域都通過其默認(rèn)Buffered Graphics Context實例實現(xiàn)應(yīng)用程序默認(rèn)雙緩沖的管理。一般情況下,應(yīng)用程序的應(yīng)用域存在唯一性,因而每個應(yīng)用程序通常都只有一個默認(rèn)的'由Buffered Graphics Manager類管理Buffered=Graphics Context實例。管理Buffered Graphics Context實現(xiàn)雙緩沖的具體步驟如下:引用Buffered Graphics Context類的實例。通過調(diào)用Buffered Graphics Context.Allocate方法創(chuàng)建Buffered Graphics類的實例。通過設(shè)置Buffered Graphics.屬性將圖形繪制到緩沖區(qū)。

  在緩沖區(qū)中完成所有的圖形繪制操作后,再將緩沖區(qū)的圖形內(nèi)容通過Buffered Graphics.Render方法復(fù)制到與該緩沖區(qū)關(guān)聯(lián)的繪圖圖面或者指定的繪圖圖面。完成呈現(xiàn)圖形之后,對Buffered Graphics實例調(diào)用Dispose方法完成系統(tǒng)資源的釋放。

  2.2.3 編程實例

  無錫地鐵一號線的遠(yuǎn)程故障傳輸?shù)孛孳浖残枰渲械膱D形閃爍現(xiàn)象。以無錫地鐵一號線的遠(yuǎn)程故障傳輸?shù)孛孳浖䴙槔樱v述怎樣使用.NET框架內(nèi)置雙緩沖技術(shù)消除圖形閃爍。

  無錫地鐵一號線的遠(yuǎn)程故障傳輸?shù)孛孳浖菍RM模塊的故障數(shù)據(jù)通過無線傳輸傳到地面軟件,然后通過地面軟件將故障數(shù)據(jù)顯示出來。ERM模塊將數(shù)據(jù)打包發(fā)給車載PIS,然后車載PIS發(fā)給中間服務(wù)器,中間服務(wù)器再轉(zhuǎn)發(fā)給地面軟件。地面軟件接收的是實時數(shù)據(jù),每隔50ms接收的數(shù)據(jù)就填充顯示一次,界面顯示的內(nèi)容需要不斷刷新,刷新次數(shù)過于頻繁,就會出現(xiàn)閃屏的現(xiàn)象。

  為解決這個問題,此軟件使用了雙緩沖技術(shù)中的默認(rèn)緩沖。數(shù)據(jù)是在ListView、ListBox兩個控件上顯示,通過Set-Style為ListView、ListBox啟用默認(rèn)緩沖。

  沒有使用雙緩沖時,在屏幕上直接繪制ListBox與ListView,然后填充數(shù)據(jù),就會看見屏幕上的數(shù)據(jù)不停地閃爍;而雙緩沖技術(shù)的繪圖,先在內(nèi)存上創(chuàng)建的“虛擬屏幕”上繪圖、填充數(shù)據(jù),然后將繪好了的圖形一次性“拷貝”到屏幕上。

  其實也可以使用自定義雙緩沖來實現(xiàn),其效果與默認(rèn)雙緩沖一樣。默認(rèn)雙緩沖的使用比較簡便,自定義的卻繁瑣一些,但是更具靈活性,然而默認(rèn)雙緩沖是在每次繪圖時建立新緩沖區(qū),使用完便馬上釋放。當(dāng)應(yīng)用中繪圖操作密集時,這種頻繁地分配、釋放內(nèi)存,將會嚴(yán)重影響程序的性能。

  3 結(jié)語

  消除閃屏的常用編程技術(shù)便是雙緩沖技術(shù)。具體應(yīng)用中需要根據(jù)應(yīng)用的簡單難易程度進(jìn)行選擇采用默認(rèn)雙緩沖還是自定義雙緩沖,對于繪圖操作較少的簡單應(yīng)用程序,一般采用啟動默認(rèn)雙緩沖;而對于那種繪圖操作密集的應(yīng)用程序,例如:動畫、游戲等,應(yīng)該優(yōu)先選擇自定義雙緩沖,可以控制雙緩沖的中間過程,來提高程序性能。

【基于NET的雙緩沖技術(shù)論文】相關(guān)文章:

.net畢業(yè)論文參考文獻(xiàn)02-12

.NET實習(xí)總結(jié)12-26

基于核心素養(yǎng)的英語寫作教學(xué)策略論文09-29

基于英漢對比的大學(xué)英語寫作教學(xué)方案研究論文12-12

net economy的英語四級作文06-22

科技ASP.NET面試題06-20

ASP.NET面試試題集錦06-20

必備.net面試題及答案06-19

常見.net面試題及答案06-19

ASP.NET專業(yè)面試試題06-16