亚洲精品中文免费|亚洲日韩中文字幕制服|久久精品亚洲免费|一本之道久久免费

<optgroup id="cczp1"><ruby id="cczp1"><cite id="cczp1"></cite></ruby></optgroup>
  • <acronym id="cczp1"></acronym>
    <acronym id="cczp1"><option id="cczp1"><ol id="cczp1"></ol></option></acronym>
    <delect id="cczp1"></delect>
    <center id="cczp1"></center>
    <delect id="cczp1"></delect><em id="cczp1"><button id="cczp1"><blockquote id="cczp1"></blockquote></button></em>
    1. <optgroup id="cczp1"><td id="cczp1"><dfn id="cczp1"></dfn></td></optgroup>

      WinForm(九)UI加載“大”數(shù)據(jù)

      由于WinForm的UI是繪制的,所以在加載大量數(shù)據(jù)數(shù)據(jù)時(shí)會(huì)有一定的延時(shí),本篇就討論幾個(gè)減少延時(shí)的方法。

      在加載有規(guī)律數(shù)據(jù)時(shí),可以考慮用遞歸,簡(jiǎn)單方便快捷來加載數(shù)據(jù),如下,把一個(gè)文件夾下的所有文件或文件夾加載到樹形菜單上,以樹形展示,代碼實(shí)現(xiàn)如下。

      var rootPath = “d://abc/bcd”;var rootNode = treeView1.Nodes.Add(rootPath, Path.GetFileName(rootPath));LoadFile(rootNode);void LoadFile(TreeNode node){foreach (var file in Directory.GetFiles(node.Name)){node.Nodes.Add(file, Path.GetFileName(file));}foreach (var dir in Directory.GetDirectories(node.Name)){var childNode = node.Nodes.Add(dir, Path.GetFileName(dir));LoadFile(childNode);}}

      上面的是練了個(gè)手,接下來我們加載一個(gè)大點(diǎn)的數(shù)據(jù),一個(gè)全國的行政區(qū)劃表,有省,市 ,縣,鄉(xiāng)鎮(zhèn)四級(jí),一共49000多條數(shù)據(jù),數(shù)據(jù)字段有sid,pid,name。本篇我們主要是看從內(nèi)存list到UI上,所以加載數(shù)據(jù)不是重點(diǎn),可以是數(shù)據(jù)庫,也可以是文件中,最終數(shù)據(jù)會(huì)在內(nèi)存的list中。

      class Province{public string sid { get; set; }public string pid { get; set; }public string name { get; set; }}var rootNode = treeView1.Nodes.Add(“0”, “中國”);LoadProvince(rootNode);void LoadProvince(TreeNode node){foreach (var item in list.Where(s => s.pid == node.Name)){var childNode = node.Nodes.Add(item.sid, item.name);LoadProvince(childNode);}}

      如果直接用遞歸加載,速度太慢,為了加快速度,就得并行加載了,于時(shí)就增加Task.Run,因?yàn)槭谴蠖嗑€程中異步操作UI,所以還得用this.Invoke,代碼如下。運(yùn)行,會(huì)看到,速度顯然快了不了,但還不是理想結(jié)果,理想是無感。

      var rootNode = treeView1.Nodes.Add(“0”, “中國”);LoadProvince(rootNode);void LoadProvince(TreeNode node){Task.Run(() =>{foreach (var item in list.Where(s => s.pid == node.Name).OrderBy(s => s.sid)){this.Invoke(() =>{node.Nodes.Add(item.sid, item.name);if (node.Level == 0){node.Expand();}});}foreach (TreeNode childNode in node.Nodes){LoadProvince(childNode);}});}

      后來又想到,可不可以把樹形菜單給序列化,窗體啟動(dòng)時(shí),返序列化回來,用BinaryFormatter來實(shí)現(xiàn)(現(xiàn)在官方不鼓勵(lì)用),首先TreeView不支持序列化,只能換成TreeView的Nodes屬笥來序列化。窗體啟動(dòng)時(shí),它的加載速度與上面的異步遞歸差不多,沒有明顯改善。

      即然一次加載大量數(shù)據(jù)不行,就再換一下思路,一次加載少一些,因?yàn)槭荱I,用戶肯定有交互,利用用戶的交互來觸發(fā)加載他想要看的數(shù)據(jù),這個(gè)少量多少為好,對(duì)于樹形控件來說,如果想看不出來,那就是兩級(jí),用戶點(diǎn)開第二級(jí)的時(shí)候再加載兩級(jí),這樣用戶始終感覺用數(shù)據(jù)。

      private void Form1_Load(object sender, EventArgs e){var rootNode = treeView2.Nodes.Add(“0”, “中國”);LoadProvince(rootNode, 1);this.treeView2.BeforeExpand += new System.Windows.Forms.TreeViewCancelEventHandler(this.treeView2_BeforeExpand);}private void treeView2_BeforeExpand(object sender, TreeViewCancelEventArgs e){if (e.Node != null & e.Node.Nodes != null &&e.Node.Nodes.Count > 0){e.Node.Nodes.Clear();LoadProvince(e.Node, 1);}}

      性能的問題永遠(yuǎn)沒有最好,也沒有一種方式能就通吃各種場(chǎng)景,得一個(gè)個(gè)換思路來解決,不過上面的思路肯定不是最好的,如果你有一次性加載全部更快的解決方案,請(qǐng)告我,我實(shí)現(xiàn),然后再分享給更多的人。

      鄭重聲明:本文內(nèi)容及圖片均整理自互聯(lián)網(wǎng),不代表本站立場(chǎng),版權(quán)歸原作者所有,如有侵權(quán)請(qǐng)聯(lián)系管理員(admin#wlmqw.com)刪除。
      用戶投稿
      上一篇 2022年9月20日 12:14
      下一篇 2022年9月20日 12:14

      相關(guān)推薦

      • ios手游模擬器(手游模擬器ios)

        本文主要講的是ios手游模擬器,以及和手游模擬器ios相關(guān)的知識(shí),如果覺得本文對(duì)您有所幫助,不要忘了將本文分享給朋友。 哪個(gè)iOS模擬器能多開手游賬號(hào)?可以推薦個(gè)好用的模擬器給我嗎…

        2022年11月27日
      • 明年底驗(yàn)收!我國重點(diǎn)地區(qū)將實(shí)現(xiàn)秒級(jí)地震預(yù)警

        記者從日前召開的2022年全國地震科技工作會(huì)議上了解到,近年來,地震科技助力防震減災(zāi)工作提質(zhì)增效。我國地震監(jiān)測(cè)核心技術(shù)實(shí)現(xiàn)自主創(chuàng)新可控,國內(nèi)地震自動(dòng)速報(bào)平均用時(shí)縮短到2分鐘,地震參…

        2022年11月27日
      • 短視頻策劃內(nèi)容的3個(gè)要點(diǎn)(短視頻策劃內(nèi)容怎么做)

        短視頻在制作時(shí),內(nèi)容框架非常重要。如果直奔主題,然后結(jié)束,聚卓告訴你,這樣的短視頻已經(jīng)過時(shí)了?,F(xiàn)在的短視頻需要框架的,但不是任何框架,它需要一種易于理解和消化的框架。而且,現(xiàn)在大多…

        2022年11月27日
      • 美團(tuán)第三季度實(shí)現(xiàn)營收626億元,即時(shí)配送訂單量增至50億筆

        新京報(bào)訊(記者秦勝南)11月25日,美團(tuán)發(fā)布業(yè)績(jī)公告顯示,第三季度營收為626億元,較去年同比增長(zhǎng)28.2%,凈利潤(rùn)為12.2億元。第三季度,美團(tuán)即時(shí)配送訂單數(shù)增長(zhǎng)至50億筆。截至…

        2022年11月27日
      • 個(gè)人怎么做抖音帶貨(個(gè)人做抖音帶貨能賺錢嗎)

        抖音如今是大家很熟悉的短視頻平臺(tái),不過現(xiàn)在的抖音卻不只是短視頻那么簡(jiǎn)單,它的功能非常豐富,其中一個(gè)就是可以帶貨,相信很多小伙伴都有在抖音上買過東西,抖音如今的變現(xiàn)能力也是不容小覷的…

        2022年11月25日
      • 韓國將舉辦中國電影展 你好李煥英等將在韓上映

        11月24日,韓國電影振興委員會(huì)表示,為紀(jì)念中韓建交30周年,將舉辦中國電影展。 展映電影名單 電影展將于12月1日至4日舉行,地點(diǎn)在首爾藝術(shù)之家Momo舉行,同月12日至18日和…

        2022年11月25日
      • 中國體育彩票app怎么買世界杯(中國體育彩票app官方下載安裝)

        中國體育彩票app相信買彩票的小伙伴都有使用過,這段時(shí)間世界杯更是火爆,那么中國體育彩票app怎么買世界杯?中國體育彩票app買世界杯在哪里買?會(huì)犯法嗎?下面小編為大家?guī)碇袊w育…

        2022年11月25日
      • 中國疫情為什么搞得那么緊張(為什么要搞疫情)

        有在關(guān)注國內(nèi)本輪疫情的小伙伴應(yīng)該注意到了,這幾天國內(nèi)疫情的情況還是比較嚴(yán)峻的,而各地也都在針對(duì)疫情實(shí)行嚴(yán)格的管控措施。那么,中國疫情為什么搞得那么緊張?對(duì)比國外,國內(nèi)疫情的防控措施…

        2022年11月25日
      • 中國疫情為何突然嚴(yán)重了(大連疫情為何突然增加那么多)

        有在關(guān)注國內(nèi)此次疫情的小伙伴應(yīng)該注意到了,近期國內(nèi)各地的疫情情況也都是比較嚴(yán)峻的。而對(duì)于進(jìn)入十一月份后各地突然爆發(fā)的疫情,大家也都第一時(shí)間查詢?cè)?。中國疫情為何突然?yán)重了?為什么國…

        2022年11月25日
      • 中國體育彩票app可以在線購買嗎(中國體育彩票app官方下載)

        中國體育彩票app是一款可以購買彩票的app,最近一段時(shí)間卡塔爾世界杯火熱舉行,不少小伙伴想要買彩票,那么中國體育彩票app可以在線購買嗎?線上購買是否違法?下面小編為大家?guī)碇袊?/p>

        2022年11月25日

      聯(lián)系我們

      聯(lián)系郵箱:admin#wlmqw.com
      工作時(shí)間:周一至周五,10:30-18:30,節(jié)假日休息