在线不卡日本ⅴ一区v二区_精品一区二区中文字幕_天堂v在线视频_亚洲五月天婷婷中文网站

  • <menu id="lky3g"></menu>
  • <style id="lky3g"></style>
    <pre id="lky3g"><tt id="lky3g"></tt></pre>

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

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

    在加載有規(guī)律數(shù)據(jù)時,可以考慮用遞歸,簡單方便快捷來加載數(shù)據(jù),如下,把一個文件夾下的所有文件或文件夾加載到樹形菜單上,以樹形展示,代碼實現(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);}}

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

    如果直接用遞歸加載,速度太慢,為了加快速度,就得并行加載了,于時就增加Task.Run,因為是大多線程中異步操作UI,所以還得用this.Invoke,代碼如下。運行,會看到,速度顯然快了不了,但還不是理想結(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);}});}

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

    即然一次加載大量數(shù)據(jù)不行,就再換一下思路,一次加載少一些,因為是UI,用戶肯定有交互,利用用戶的交互來觸發(fā)加載他想要看的數(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)沒有最好,也沒有一種方式能就通吃各種場景,得一個個換思路來解決,不過上面的思路肯定不是最好的,如果你有一次性加載全部更快的解決方案,請告我,我實現(xiàn),然后再分享給更多的人。

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

    相關(guān)推薦

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

      2022年11月25日

    聯(lián)系我們

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