在编程中经常会碰到程序执行效率低的问题,而有时候问题时出在循环体中。我们通过下面一个例子看在编程中要注意的问题。
在这个例子中的代码主要功能是定时检查数据库中的几个表是否发生了更新,如果有更新则自动刷新显示窗口中的对应数据网格。检查这几个表的数据是否更新是通过判断一个数据表中对应表名的一个标志字段值是否为1,如果为1,则表示该表已更新,数据网格需要刷新。
下面这段代码是优化前的代码(该代码在Timer控件的OnTime事件运行):
try
//停止Timer控件的计时
Timeupdate.Enabled := False;
<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
////读取记录刷新状态的表的数据
//ADOQryReadUpdate.Refresh;
//ADOQryReadUpdate.Requery();
ADOQryReadUpdate.Close;
ADOQryReadUpdate.Open;
ADOQryReadUpdate.First;
//通过循环判断那个表已经更新
with ADOQryReadUpdate do
while not Eof do
begin
bFlag := False;
//判断对应表名的标志字段是否为1,如果为1则刷新对应数据网格
if (FieldByName('flag').asinteger = 1)
and (FieldByName('channelid').AsInteger = LoginChannelID) then
begin
sName := FieldByName('name').asstring;
//刷新数据网格代码,这里略去了
……
if bFlag then
begin
//修改对应表标志值为0
Edit;
FieldByName('flag').asBoolean := False;
Post;
end;
Next;
end;
//恢复Timer控件为工作状态
Timeupdate.Enabled := True;
except
on E: Exception do
Application.MessageBox(
pchar(Err_TimeUpdateTimerFail + #13 + E.Message),
'Error',
MB_ICONERROR
);
end;
因为某些表的数据量比较大,所以在刷新网格的时候会有停顿,经过优化数据库结构,增加冗余字段,刷新速度已经获得提高,但还是存在停顿一到两秒的情况。因为一开始主要集中点在数据库上,所以没考虑到代码在执行效率上存在的问题。当在一次测试中发现,当没有任何数据网格需要刷新的情况下也要停顿一到两秒。我立刻想到这肯定是代码的执行效率有问题。经过分析,发现无论是否有数据更新,程序都要执行一次While循环,而这个While要遍历所有记录,当发现数据更新时,还要一个一个的修改标志值并保存回数据库。于是立刻让程序员做一下修改:
1、 只读标志值为1的记录,减少循环次数;当没有标志值为1的记录时,不执行循环和更新操作。
2、 在最后通过UPDATE语句更新所有标志值为1的记录
经过修改,程序的停顿现象消失了,刷新效率大大提高。
以上代码是一些程序员经常会犯的错误,主要是没考虑到多余的循环会增加不少代码运行时间。而通过减少循环次数,往往是提高代码执行效率的有效方法。
分享到:
相关推荐
c++实际编程中应该特别注意的一些问题 ,讲的很详细,设计到的面很光,几乎涵盖c++的编程中设计到的所有问题,讲解很细致,容易懂。
本文主要讲了单片机嵌入式编程应注意的问题,下面一起来学习一下
针对系统安全,使用C、JAVA语言编程时的注意事项
多线程编程中要注意协调好各个线程的优先级。一般来说,控制线程的优先级要高于Worker线程。这样做,可以保证Client(最终用户或者其他模块)尽快得到响应。当控制线程是与最终用户交互的界面线程时更应如此,如果...
在本篇文件中,我们将讨论编程人员在使用ASP.NET开发应用程序时需要注意的10个技巧,这些技巧涉及从缺省的控件、表单名的改变到StringBuilder类的使用,有助于编程人员能够尽快地适应.NET环境。
从数控加工生产实际出发,介绍了在数控加工过程中出现的几种常见的加工质量问题,并分析了导致问题的原因,从加工策略和加工参数的选择入手,给出了解决措施,着重介绍了在UG数控加工编程时应该注意的几点事项。
本文主要讲了一下关于单片机嵌入式编程注意事项,一起来学习一下
单片机 C 语言编程应注意的若干问题 1 单片机 C 语言主要特点 2 单片机 C 语言与标准 C 语言的区别 2.1 数据类型的选用 2.2 算法设计问题 3 数据存储器的分配 .................
ug编程与加工注意事项
Keil中C语言与汇编语言混合编程需要注意的几个地方.doc
VHDL 编程要注意问题 VHDL 共定义了 5 种类型的端口,分别是 In, Out,Inout, Buffer及 Linkage,实际设计时只会用到前四种。
Java开发中,有很多琐碎的细节容易被我们忽视,本书算是对《Java Pazzlers》(Java解惑)的提炼
VC编程中需注意的清除函数 VC编程中需注意的清除函数 VC编程中需注意的清除函数
java 编程规范,对java编程中一些规范进行了归纳,方便编程者编写更加规范的代码
介绍C编程中的一些经验与教训,在开C程序时应注意的问题
宝马编程注意事项
详细解析化为认证的注意事项以及开发守则,程序员必看必学。
分析和讲述了单片机编程过程中要注意的一系列事项,对编程方法做了分析,是一份ppt的文档。
本文较详细地分析了单片机C语言的特点,就单片机系统资源对C语言编程的制约,偏与C语言混合偏程等问题进行进行了计论,并给出了相应的处理程序。
在单片机编程的过程中,如果一名设计者能够同时掌握多门...本文特意为大家整理了拥有嵌入式编程领域多年工作经验的工程师意见,汇总成了一篇能够对嵌入式编程经验有着指导意义的注意事项,感兴趣的朋友快来看一看吧。