国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

使用雙緩沖技術(shù)解決winform窗體控件卡頓(dataGridView加載數(shù)據(jù)緩慢)

這篇具有很好參考價(jià)值的文章主要介紹了使用雙緩沖技術(shù)解決winform窗體控件卡頓(dataGridView加載數(shù)據(jù)緩慢)。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

一、背景

在做C/S項(xiàng)目中,做好的窗體出現(xiàn)了頁面加載控件緩慢,放大、縮小窗體之后,窗體加載卡頓,以及數(shù)據(jù)渲染緩慢。

使用雙緩沖技術(shù)解決winform窗體控件卡頓(dataGridView加載數(shù)據(jù)緩慢)

二、可以利用雙緩沖技術(shù)去解決這個(gè)問題。那么什么是雙緩沖?

百度介紹:我們看電視時(shí),看到的屏幕稱為OSD層,也就是說,只有在OSD層上顯示圖像我們才能看到。現(xiàn)在,我需要?jiǎng)?chuàng)建一個(gè)虛擬的、看不見但是可以在上面畫圖(比如說畫點(diǎn)、線)的OSD層,我稱之為offscreen(后臺(tái)緩沖區(qū))。這個(gè)offscreen存在于內(nèi)存中,我們在上面畫圖,這個(gè)offscreen上面的東西可以顯示在OSD層上,需要一個(gè)創(chuàng)建這個(gè)offscreen的函數(shù),返回這個(gè)offscreen的句柄(整型指針)、寬度、高度、指向新建offscreen數(shù)據(jù)緩沖區(qū)的指針,該緩沖區(qū)是一個(gè)在函數(shù)外創(chuàng)建的offscreen的數(shù)據(jù)緩沖區(qū),大小是offscreen的高度*寬度*每個(gè)像素點(diǎn)數(shù)據(jù)的大小。閃爍是圖形編程的一個(gè)常見問題。需要多重復(fù)雜繪制操作的圖形操作會(huì)導(dǎo)致呈現(xiàn)的圖像閃爍或具有其他不可接受的外觀。雙緩沖的使用解決這些問題。雙緩沖使用內(nèi)存緩沖區(qū)來解決由多重繪制操作造成的閃爍問題。當(dāng)啟用雙緩沖時(shí),所有繪制操作首先呈現(xiàn)到內(nèi)存緩沖區(qū),而不是屏幕上的繪圖圖面。所有繪制操作完成后,內(nèi)存緩沖區(qū)直接復(fù)制到與其關(guān)聯(lián)的繪圖圖面。因?yàn)樵谄聊簧现粓?zhí)行一個(gè)圖形操作,所以消除了由復(fù)雜繪制操作造成的圖像閃爍。

總而言之:在計(jì)算機(jī)中,動(dòng)畫被視為一種變化的圖像序列,由一幀一幀的動(dòng)態(tài)圖像組成,這些圖像隨著時(shí)間的改變而改變,后一幀圖像是對前一幀圖像所作的修改。

在單緩沖動(dòng)畫中,圖形直接繪制在顯示緩沖區(qū),如果顯示后一幀圖像,必須擦除屏幕,所以在制作過程中需要不斷擦除屏幕,這也是屏幕閃爍(窗體加載緩慢)的原因。雙緩沖動(dòng)畫有兩個(gè)緩沖區(qū),除了有顯示緩沖區(qū)外,還有內(nèi)存緩沖區(qū),在制作過程中首先把圖形繪制在內(nèi)存緩沖區(qū)中,然后講內(nèi)存緩沖區(qū)中的圖像一次性拷貝到心事緩存區(qū),顯示緩沖區(qū)只是作為內(nèi)存緩沖區(qū)的一個(gè)映像。

舉例:

投影儀和白板。但緩沖動(dòng)畫:在使用白板的時(shí)候,如果寫滿了,需要寫下一頁,那么我只能把白板上的內(nèi)容擦除掉,再去寫內(nèi)容。雙緩沖動(dòng)畫:投影儀的時(shí)候是需要需要換內(nèi)容,我直需要把投影儀中的內(nèi)容進(jìn)行修改即可,避免擦除操作。

使用雙緩沖技術(shù)解決winform窗體控件卡頓(dataGridView加載數(shù)據(jù)緩慢)

三、具體方法(代碼展示)

1、 C# winform窗體卡頓的解決辦法

哪個(gè)窗體需要修改頁面卡頓,加入此方法

 protected override CreateParams CreateParams
        {
            get
            {
                CreateParams cp = base.CreateParams;

                cp.ExStyle |= 0x02000000;

                return cp;
            }
           
        }

該方法是可以解決頁面上所有控件加載慢的方法。

在上面的代碼中,有用到CreateParams 類,它是具體解決卡頓、閃屏的問題。查閱資料:窗體和控件的屬性CreateParams,通過它你能夠很方便的控制窗體或控件諸如邊框、最大化、最小化關(guān)閉,按鈕的隱藏、窗體的模式化,彈窗模式等的一些特性

2、那么針對dataGridView加載數(shù)據(jù)慢,不流暢的現(xiàn)象也可以用以下方法。根源上也是利用了雙緩沖技術(shù)。

需要在窗體所對應(yīng)的構(gòu)造構(gòu)造函數(shù)中寫入以下代碼,控制DataGridView加載數(shù)據(jù)延遲的問題。

this.SetStyle(ControlStyles.OptimizedDoubleBuffer //雙緩沖
                | ControlStyles.ResizeRedraw 
               | ControlStyles.AllPaintingInWmPaint, //不擦除背景,減少閃爍
                true);
            this.UpdateStyles();

            //利用反射設(shè)置DataGridView的雙緩沖
            Type dgvType = this.dgvwCustomerManagement.GetType();
            PropertyInfo pi = dgvType.GetProperty("DoubleBuffered",
               BindingFlags.Instance | BindingFlags.NonPublic);
            pi.SetValue(this.dgvwCustomerManagement, true, null);
          

四、總結(jié)

雙緩沖技術(shù)是一種用于圖形界面繪制的優(yōu)化技術(shù),通過使用兩個(gè)緩沖區(qū)來減少圖像閃爍和提高繪制效率。以下是對雙緩沖技術(shù)的總結(jié):

1. 原理:雙緩沖技術(shù)使用兩個(gè)緩沖區(qū),一個(gè)用于繪制圖像,一個(gè)用于顯示圖像。繪制圖像在后臺(tái)緩沖區(qū)進(jìn)行,完成后再將整個(gè)圖像一次性地繪制到前臺(tái)緩沖區(qū),從而避免了圖像閃爍。

2. 優(yōu)點(diǎn):使用雙緩沖技術(shù)可以提高圖形界面的繪制效率和用戶體驗(yàn)。由于繪制操作在后臺(tái)進(jìn)行,用戶可以看到一個(gè)完整的圖像,而不是逐個(gè)元素的繪制過程。這樣可以減少圖像閃爍,并提高用戶對界面的感知。

3. 實(shí)現(xiàn)方式:實(shí)現(xiàn)雙緩沖技術(shù)可以使用各種編程語言和圖形庫。一種常用的方式是使用雙緩沖繪圖對象,將繪制操作指向后臺(tái)緩沖區(qū),然后將整個(gè)后臺(tái)緩沖區(qū)繪制到前臺(tái)緩沖區(qū)。

4. 應(yīng)用場景:雙緩沖技術(shù)適用于需要頻繁繪制圖形界面的場景,如圖形編輯器、游戲界面等。在這些場景中,使用雙緩沖可以提高繪制效率和用戶體驗(yàn),減少圖像閃爍。

5. 注意事項(xiàng):在使用雙緩沖技術(shù)時(shí),需要注意內(nèi)存消耗和性能開銷。由于使用了兩個(gè)緩沖區(qū),可能會(huì)增加內(nèi)存占用。同時(shí),由于每次繪制都需要將整個(gè)后臺(tái)緩沖區(qū)繪制到前臺(tái)緩沖區(qū),可能會(huì)增加繪制的時(shí)間和CPU開銷。

總之,雙緩沖技術(shù)是一種用于圖形界面繪制的優(yōu)化技術(shù),通過使用兩個(gè)緩沖區(qū)來減少圖像閃爍和提高繪制效率。使用雙緩沖技術(shù)可以改善用戶體驗(yàn),特別是在需要頻繁繪制圖形界面的場景中。然而,在使用雙緩沖技術(shù)時(shí)需要注意內(nèi)存消耗和性能開銷。文章來源地址http://www.zghlxwxcb.cn/news/detail-432062.html

到了這里,關(guān)于使用雙緩沖技術(shù)解決winform窗體控件卡頓(dataGridView加載數(shù)據(jù)緩慢)的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 雙擊dataGridView控件中的數(shù)據(jù)行,彈出另一個(gè)窗體,并將數(shù)據(jù)傳遞到另一個(gè)窗體中的方法。實(shí)現(xiàn)窗體調(diào)用,并數(shù)據(jù)傳輸

    //實(shí)例化學(xué)生明細(xì)的窗體 public static frmStudentDetail frmsd; //主窗體雙擊單元格的事件 private void dgvStudent_CellContentDoubleClick(object sender, DataGridViewCellEventArgs e)//雙擊單元格的事件 { //通過Serverice類中的方法得到學(xué)生類 Student objectStudent = StudentService.GetStudentInfo(Convert.ToInt32( dgvStudent.Curr

    2024年02月04日
    瀏覽(23)
  • Winform中實(shí)現(xiàn)窗體控件適配(自適應(yīng)窗體)布局_通過C#代碼方式

    Winform中實(shí)現(xiàn)窗體控件適配(自適應(yīng)窗體)布局_通過C#代碼方式

    即:未啟用控件縮放效果代碼時(shí),控件內(nèi)容都是固定在窗體界面的指定位置,不會(huì)跟隨窗體的拉伸,放大而進(jìn)行適配,如下圖所示: 即:啟用控件縮放效果代碼時(shí),控件內(nèi)容會(huì)跟隨窗體的拉伸,放大而進(jìn)行適配,如下圖所示: 實(shí)現(xiàn)思路是: ①在窗體初始化時(shí)先獲取窗體的寬

    2023年04月17日
    瀏覽(28)
  • C# winform usercontrol控件跟隨主窗體實(shí)現(xiàn)自動(dòng)大小

    C# winform usercontrol控件跟隨主窗體實(shí)現(xiàn)自動(dòng)大小

    usercontrol控件跟隨主窗體實(shí)現(xiàn)自動(dòng)大小 今天是跟著嘩哩嘩哩大學(xué)學(xué)習(xí)C的第N天,但是是學(xué)習(xí)usercontrol的第一天。 第一天遇到的問題就是如何將usercontrol的大小跟隨主窗體的一起變大變小。視頻中教得很詳細(xì),首先是將usercontrol控件實(shí)例化,接著就是設(shè)置usercontrol的dock屬性為fil

    2024年02月12日
    瀏覽(24)
  • C#在winForm窗體中添加一個(gè)可以自由拖動(dòng)的控件

    C#在winForm窗體中添加一個(gè)可以自由拖動(dòng)的控件

    提示:文章寫完后,目錄可以自動(dòng)生成,如何生成可參考右邊的幫助文檔 文章目錄 目錄 文章目錄 一、實(shí)現(xiàn)步驟 1.創(chuàng)建一個(gè)新的Windows窗體項(xiàng)目 2.添加控件如圖 3.代碼部分 總結(jié) textBox1=鼠標(biāo)在需要拖動(dòng)的控件中的坐標(biāo) X 值 textBox2=鼠標(biāo)在需要拖動(dòng)的控件中的坐標(biāo) Y 值 textBox3=需要

    2024年01月19日
    瀏覽(33)
  • 【W(wǎng)inForm詳細(xì)教程一】WinForm中的窗體、Label、TextBox及Button控件、RadioButton和CheckBox、ListBox

    【W(wǎng)inForm詳細(xì)教程一】WinForm中的窗體、Label、TextBox及Button控件、RadioButton和CheckBox、ListBox

    .sln文件 :解決方案文件 位置引用 bin文件夾 : 存放項(xiàng)目的編譯結(jié)果 exe dll debug 調(diào)試 release 發(fā)布 pdb 位置信息–調(diào)試 obj文件夾 object 編譯過程中生成的中間臨時(shí)文件 加快編譯速度 Properties 引用 添加引用 --選擇需要的程序集 App.config 配置文件 .csproj 項(xiàng)目文件 位置引用 雙擊打開

    2024年02月08日
    瀏覽(57)
  • 【W(wǎng)inForm】WinForm常見窗體技術(shù)匯總

    【W(wǎng)inForm】WinForm常見窗體技術(shù)匯總

    窗體調(diào)用外部程序與漸變窗體 按回車鍵跳轉(zhuǎn)窗體中的光標(biāo)焦點(diǎn) 剪切板操作 實(shí)現(xiàn)拖放操作 移動(dòng)的窗體 抓不到的窗體 MDI窗體 提示關(guān)閉窗體 窗體正在變色: 窗體調(diào)用網(wǎng)絡(luò)頁面–啟動(dòng)瀏覽器: 窗體調(diào)用本地程序–啟動(dòng)記事本: 按下enter鍵,光標(biāo)會(huì)向下移動(dòng): 第一個(gè)text中輸入內(nèi)

    2024年02月08日
    瀏覽(28)
  • winform窗體閃爍問題解決方式

    winform窗體閃爍問題解決方式 1、使用窗體雙緩沖 SetStyle(ControlStyles.UserPaint | ControlStyles.AllPaintingInWmPaint | ControlStyles.OptimizedDoubleBuffer, true); UpdateStyles(); 窗體的DoubleBuffered?指示是否對控件進(jìn)行雙緩存處理。 2、使用CreateParams的使用解決閃屏問題

    2024年02月12日
    瀏覽(22)
  • Winform窗體使用IOC容器

    Winform窗體使用IOC容器

    Winform窗體如何使用IOC容器呢?在nuget中添加Microsoft.Extensions.DependencyInjection 接著在Program類Main方法中添加一下代碼 在此類中繼續(xù)補(bǔ)充以下代碼 以后你的注入只需要在?static void ConfigureServices(IServiceCollection services)這個(gè)方法中注入就行了 全景圖: ? 我把窗體也注入了,不過不是

    2024年02月12日
    瀏覽(19)
  • C#--耗時(shí)操作實(shí)現(xiàn)UI界面實(shí)時(shí)更新不阻塞(耗時(shí)操作解決窗體卡頓)

    C#--耗時(shí)操作實(shí)現(xiàn)UI界面實(shí)時(shí)更新不阻塞(耗時(shí)操作解決窗體卡頓)

    C#實(shí)現(xiàn)窗體加載進(jìn)度條或者百分比實(shí)時(shí)顯示耗時(shí)操作的進(jìn)度,方法有很多。但是經(jīng)過我的學(xué)習(xí)、查找與實(shí)際應(yīng)用,發(fā)現(xiàn)Task配合MethodInvoker最為高效便捷。下面我就來結(jié)合代碼講一下要注意的問題。 C#在winform上進(jìn)行耗時(shí)操作往往會(huì)放置progressbar,問題是在UI線程上進(jìn)行耗時(shí)操作就

    2024年02月03日
    瀏覽(38)
  • WinForm使用Prism和DryIoc實(shí)現(xiàn)跨窗體數(shù)據(jù)綁定

    WinForm使用Prism和DryIoc實(shí)現(xiàn)跨窗體數(shù)據(jù)綁定

    使用Prism和DryIoc實(shí)現(xiàn)跨窗體數(shù)據(jù)綁定 開發(fā)環(huán)境: VS2022 .Net 6.0 WinForm界面程序 要求: DryIoc容器注冊為單例(Singleton)=DryIoc VM需要實(shí)現(xiàn)數(shù)據(jù)更改通知=Prism 控件數(shù)據(jù)限幅要一樣=NumericUpDown ??????????????????????????????????????? 效果: Form2修改Score時(shí)Form1立即

    2024年02月10日
    瀏覽(17)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包