非常有挑战性的问题,提高时实刷新速度

非常有挑战性的问题,提高时实刷新速度 Delphi / Windows SDK/API
http://www.delphi2007.net/DelphiDB/html/delphi_20061223094441149.html
 
      非常有挑战性的问题,提高时实刷新速度  
   
      比如做一套类试影吧的系统,需要一个时实监视客户端的一个收费软件  
   
      监视台用StringGrid   控件实现,时实(每秒钟一次)刷新数据库中的一个由Server后台写好  
   
      好的一个临时表,StringGrid判断字段值改变时才重画,  
   
      这种方法,起初数据表这有几十条,占用CPU   时间才8%左右,但数据库加到  
   
      2000多条时,CPU   时间马上升到   70%,  
   
      我估计主要的时间是用在ADOQuery.open上了  
   
      还有StringGrid是通过   for   循环给每行赋值的。  
   
      请问,有没有提供好的思路和方法!  
 

应该不至于吧,你几十条都占用了CPU   8%,可能是写法有问题吧。  
  你干嘛要不停地判断呢?有时间做判断不如直接写上去好了。  
  2000多条记录,刷新一次应该没多长时间。

首先说明  
  1、首先跟踪一下,看看时间都花在那里了  
  2、如果你的SQL语句不是特别奇怪,那么最多的时间是花在重画StringGrid上  
  3、画StringGrid的时候不要一下子都画出来,把当前显示的画出来即可,然后当StringGrid滚动的时候继续画

2000条都读取出来有意义吗?还是做成翻页的好。  
   
  在修改表的时候在其它地方设置一个状态,所有的客户仅检查这个状态。  
   
 

用StringGird?   为什么不用DBgird,这样效率更高呀!   不解!   还有为什么不做分页,就是说,设置一个时间范围,把记录分为加急,就绪,一般,三个等级来排序。   这样可以优先处理那些即将到时的数据。

 
      感谢大家的回复!  
   
      说明,我做的一套影吧的收费管理系统。  
   
      客户端是机顶盒,所有的数据都是通过   Server.exe   charge.dll   完成的,存储在  
   
      数据库中,我要的就是时实显示每个客户端的状态:  
   
      我也知道DBGrid速度比较快,但存在几个问题:  
   
      1、刷新的时候DBGrid总是很闪;  
   
      2、必须绑定数据源;  
   
      3、界面操作的灵活性也没有StringGrid好;

那我建议你用过Socket来做吧!

内部用一个线程来检查是否有更新,如果数据有变化在刷新界面.这样界面刷新的频率就很小很多。也就不闪了。  
   
 

 
      接受   winxkm(蹩脚的程序员)     的意见

posted on 2008-10-20 10:30  delphi2007  阅读(283)  评论(0编辑  收藏  举报