當我插入大量的item,超過幾千項時會很慢很慢,甚至出錯死機。為什麼?

解决方案 »

  1.   

    listctrl 只适合于少量数据的显示,数据量大时可能会死机,建议你用grid控件,速度很快的。或者用分批插入的方法,比如,每次插入100条记录,并在循环中调用::peekmesage(),释放系统资源,不过,速度还是不能提高。
    以上纯属个人看法,仅供参考。
      

  2.   

    我想是LISTCTRL快.可以设置让LIST停止刷新,全部加入完毕后再重新刷新.
      

  3.   

    同意上面的,似乎是setdatarefresh()
      

  4.   

    謝謝,不過,沒有找到setdatarefresh這種函數,我想也是會有的,可一直都沒找到。麻煩各位再提示一二。
      

  5.   

    加入的时候最好用 粗粒度。
    就是 用 insert struct 什么的
    这样应该能有点好处的
      

  6.   

    還有,當插入大量數據後,會出現“某項必要資源不可用!”的一個很難看的框,而且我在onpaint裡textout的字全都錯位了,跑到左上角了。看樣子是資源沖突,這是為什麼呢。需要說明的是: 我的這個包含listctl的對話框是在一個擴展dll裡的。看樣子是切換資源的時候出問題了。 可為什麼在數據量不大的時候沒事呢?
      

  7.   

    pigczc 怎麼插入粗粒度的數據呢?
      

  8.   

    没有什么setdatarefresh函数,只有SerRedraw函数。
    在插入前用FALSE调用这个函数,插入完毕后用TRUE调用这个函数就行了。
    尽管插入的速度可能会提高,但是刷新listbox可能还是需要很多时间,我没有试过。
      

  9.   

    不好意思,应该是SetRedraw函数。
      

  10.   

    可以设置让LIST停止刷新,全部加入完毕后再重新刷新.
      

  11.   

    punpuny() 说的对,在插入数据前SetRedraw(FALSE),在所有数据插入完成后,SetRedraw(TRUE)刷新内容
      

  12.   

    那肯定是你用了dll中所不包含的资源。
      

  13.   

    数据量很大,但是每次可以显示的数据总是有限的。
    我想能不能这样做:
    先估计一下当前ListCtrl能显示的项目数N,加入2N~3N个数据到ListCtrl。
    重载CListCtrl的OnVScroll函数,如果用户滚动ListCtrl,则根据滚动位置,动态添加/删除的项目,使ListCtrl中的项目总是包含需要显示的项目,并在上下两端都多出一些有利于滚动。
    可能还需要控制一下滚动条,因为这样滚动条不能正确的放映滚动位置,建议用外部的滚动条代替ListCtrl自有的。
      

  14.   

    上面說的資源問題是有的,如果Windows窗口太多或者程序使用GDI时没有注意释放,就会出现“资源不足”的警告。一般是字体变成默认字体,图标和位图不能显示等,感觉是GDI不能获取句柄造成的。
      

  15.   

    就是插入的时候 用 struct插入, 不用 插入一条 然后 设置的那种方法
      

  16.   

    这里很热闹,各位高手看看,或者帮我up一下,我up不了了。
    http://www.csdn.net/expert/topic/919/919723.xml?temp=.7951471