大侠们有没有好的算法提高数据的执行速度?(100分)

  • 主题发起人 主题发起人 tippchlj
  • 开始时间 开始时间
T

tippchlj

Unregistered / Unconfirmed
GUEST, unregistred user!
如何提高采集速度?我做的是门禁系统监控刷卡采集<br>采集的过程中,如果机器比较多的话而且存在机器没有联通,这样的话就会采集速度很慢。<br>而且存在这样的情况,某个机器刚开始没有联通,在采集的过程中有人插上电进行联通了。或者某台机器刚开始是联通的采集的过程中给断电了。<br>有人说加个定时器采集数据的过程中每个几秒对不通的机器采集一次这样采集速度不知道怎样?还是有其他办法?<br>下面是我的一部分代码处理,看起来会比较清楚一点。麻烦你们了呵呵。<br>TCquery.sql.Clear;<br>TCquery.sql.Add('select ControllerSn,ControllerType From Controller ');<br>TCquery.open;<br>While True do<br>begin<br>&nbsp; TcQuery.First;<br>&nbsp; while not TCquery.eof do<br>&nbsp; begin<br>&nbsp; &nbsp; ConSn := TCquery.Fieldvalues['ControllerSn']; //机器名称<br>&nbsp; &nbsp; ConType := TCquery.Fieldvalues['ControllerType'];//机器类型<br>&nbsp; &nbsp; <br>&nbsp; &nbsp; upok := UnitComm.DataCollect(ConSn, ConType, coms, Recordr);//从该机器读取数据<br>&nbsp; &nbsp; if Upok = 1 then//数据读取成功<br>&nbsp; &nbsp; begin<br>&nbsp; &nbsp; &nbsp;//保存读取的数据Recordr到数据库<br>&nbsp; &nbsp; &nbsp;//并在数据库中记录该机器为通<br>&nbsp; &nbsp; end<br>&nbsp; &nbsp; else//数据读取不成功<br>&nbsp; &nbsp; begin<br>&nbsp; &nbsp; &nbsp; //在数据库中记录该机器为不通<br>&nbsp; &nbsp; end;<br>&nbsp; &nbsp; TcQuery.Next;<br>&nbsp; end;<br>end;<br><br>我加了一些处理速度稍微快一点:定义了一个变量 tmValue:Integer =0;<br>每执行一条记录不论通与不通都执行<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;tmValue:= tmValue+ 1;<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if tmValue&gt;= (TCquery.RecordCount + 1) then<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;tmValue := 0;<br>在从机器读取数据之前执行<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if TCquery.RecordCount &gt;=3 then<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if tmValue &lt; 3 then<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; begin<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; tmValue := tmFlag + 1;<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; TcQuery.Next;<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Continue;<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; end;
 
给点意见,可以忽略!<br>新开一个线程,监视所有的机器是不是联通的!<br>是的话就保存一下,放到一个表里,这个应该是很快的代码不多!<br>查询的时候,只从这个表里面查询就好了,保证所有查询的都是联通的<br>在一个,这种查询方式本来就是很慢的,可以考虑,机器主动发出个什么电频信号,<br>检测这个信号,就行了,类似中断!
 
to:menzhe<br>你好:我这个采集记录本身就是线程,如果在新开一个线程的话,会出现端口号被占用。<br>因为我把打开端口放在了线程里面。请问还有好的解决方法吗?
 
数据库本身并不慢<br>慢的代码你没发
 
另外做一个线程,隔一定的时间检查一下这些机器的状态。如果没有连通,就不要再去采集了。采集的方法嘛,你没有贴上来,所以也不好说。<br>至于你说的新开一个线程端口号被占用,我是这样设计的:每次对串口操作完成以后就立即关闭该串口。比如说:开启串口-发送命令-关闭串口。<br>我是这样设计的,速度也还行。<br>我以前也做过刷卡监控
 
线程同步
 
放假了好久没来了,你们的建议很好,谢谢各位朋友了。
 
多人接受答案了。
 
后退
顶部