日韩欧美另类久久久精品_亚洲大色堂人在线无码_国产三级aⅴ在线播放_在线无码aⅴ精品动漫_国产精品精品国产专区

我要投稿 投訴建議

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

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

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

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

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

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

  1 閃屏

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

  2 雙緩沖技術(shù)

  2.1 基本思想

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

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

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

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

  2.2 實(shí)現(xiàn)方法

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

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

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

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

  2.2.3 編程實(shí)例

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

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

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

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

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

  3 結(jié)語(yǔ)

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

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

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

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

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

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

net economy的英語(yǔ)四級(jí)作文06-22

科技ASP.NET面試題06-20

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

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

常見(jiàn).net面試題及答案06-19

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