用过金山词霸或其它英汉词典的人应该都知道,词典的左边是一个ListView。我们从数据库中读10万条数据循环地用ListView列出来也要几分钟时间。金山词霸几十万数据,如何在几秒内全部读取并列出来呢?它每次列出来的单词顺序都是一样的,如果用多线程列的话,又怎么样确保列出来后的顺序每次都一样?

解决方案 »

  1.   

    这里没有必要多线程。
    参考 TListView.Items.BeginUpdate and  TListView.Items.EndUpdate
      

  2.   

    BeginUpdate 和 EndUpdate确实能让它加快一半的速度,但是我要列的是45万条数据啊。即便加上这两个,也得5分钟以上才能列出来。DBGrid可以在几秒内把45条记录显示出来,但客户要的是词霸那个ListView的效果,GBGrid做不到。
      

  3.   

    用虚的方法,把数据保存在内存中,设置OwnerData为true。网上搜一下有例子的。
      

  4.   

    其实它慢不是因为ListView显示慢。是因为adoquery从第一行循环到45万行慢。HsWong(),你这个方法是可行的。但我不知道该如何下手。我的adoquery打开后,里面有个id,有个name,id是连续的,可以当指针用,可我不知道该怎么通过这个指针在内存中读到name的内容。