非常有挑战性的问题,提高时实刷新速度 Delphi / Windows SDK/APIhttp://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(蹩脚的程序员) 的意见