各位大哥大姐,小弟是Delphi 开发的,现遇到相当麻烦的问题,就是Delphi控件处理速度的问题。。我用的是ListView 控件,,现在有数据量20000-50000条左右,一旦全部加到ListView里,程序就很卡,而且加载数据的时候速度还很慢,,请问有什么有效的办法可以解决这个问题!!!

解决方案 »

  1.   

    ListView1.Items.BeginUpdate;
    //中间写代码
    ListView1.Items.EndUpdate;
      

  2.   

    推荐
    但ListView1表现最好也就在一万条左右,数据量太大也会很卡。
    建议只显示用户需要的数据,每个人也不可能一次看2万条数据啊!
      

  3.   

    换个控件,用VirtualTreeView,这个控件最大的特点就是快,支持大容量数据
      

  4.   

    ListView1.Items.BeginUpdate;
    //中间写代码
    ListView1.Items.EndUpdate;
    没效果
      

  5.   

    改用VirtualTreeView,我加载了6W条都没问题。
      

  6.   

    几万条数据对于ListView已经超负荷了,还是分屏显示每次只显示一部分
      

  7.   

    VirtualTreeView的机制是为加载速度专门实现的
    有点类似显示才加载,所以速度特别快
      

  8.   

    你可以试试ListView 的OnData事件,需要先定义一个结构体,并自动创建一个动态列表管理加载的数据。
    由onData装入,节点行的维护要自行维护。这样速度非常快,所耗费用时间基本上是提取数据的时间。可以试一试。还是建议你不要这么用,有谁一下子能看上万行数据啊,采用分页吧,速度快,服务器压力小,网络流量也小。
      

  9.   

    要想从根本上解决问题 , 就要重新LISTVIEW  ,用API 控制滚动条 ,  实现动态加载 ;数据内容(LISTVIEW里边的内容)可以存在内存或者文件中;难度比较高 我又比较懒 所以还是说下吧~~
      

  10.   

    忘记了  从LISTVIEW的父类继承
      

  11.   

    很多年的老问题了,还有人问?
    打开ownerdata为true
    在ondata事件里写显示,100万也不停顿。
      

  12.   

    Virtual ListView。在于把ListView->OwnerData设为true,然后直接设置
    ListView->Items->Count为数据总数,实际的数据可以保在任意其它速度较快且可直接索引的容器里(如STL中的vector),然后关键是在OnData事件中写入代码通过Item->Index从容器中(如vector)取出数据,然后用
    Item->Caption = ???;
    Item->SubItems->Add(???);
    Item->SubItems->Add(???);
    来动态的写入数据到ListView用于UI显示,如此Virtual ListView即完成.
      

  13.   

    用ListView的话,建议分页,自己设定一个变量控制页数,根据用户需要提取需要显示的数据。
    用Virtual ListView的话就更方便了,每个项目需要显示的时候,控件才要求你提供数据的。
      

  14.   

    你用别的程序一下子读那么多也是卡的,直接在sqlserver里显示都会卡,我以前写数据库的都是,自己手动读取然后绑定到控件上,或者填弃进去的,速度非常快的,希望对楼主有所帮助
      

  15.   

    引用 22 楼 yshuui 的回复:
    Virtual ListView。在于把ListView->OwnerData设为true,然后直接设置
    ListView->Items->Count为数据总数,实际的数据可以保在任意其它速度较快且可直接索引的容器里(如STL中的vector),然后关键是在OnData事件中写入代码通过Item->Index从容器中(如vector)取出数据,然后用
    Item->Caption = ?……
    学习!
      

  16.   

    对,Ondata加载数据非常快的。
      

  17.   

    建议分页,想想看用户使用一个几万条目的ListView,也不方便使用。