在编程中经常会碰到程序执行效率低的问题,而有时候问题时出在循环体中。我们通过下面一个例子看在编程中要注意的问题。
在这个例子中的代码主要功能是定时检查数据库中的几个表是否发生了更新,如果有更新则自动刷新显示窗口中的对应数据网格。检查这几个表的数据是否更新是通过判断一个数据表中对应表名的一个标志字段值是否为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的记录
经过修改,程序的停顿现象消失了,刷新效率大大提高。
以上代码是一些程序员经常会犯的错误,主要是没考虑到多余的循环会增加不少代码运行时间。而通过减少循环次数,往往是提高代码执行效率的有效方法。
分享到:
相关推荐
在深入探讨单片机嵌入式编程中应注意的问题之前,首先需要了解单片机嵌入式编程的基础知识。嵌入式系统主要指集成在机械设备中的专用计算机系统,通常由微控制器(即单片机)和相应的软件组成。编程过程中,需要注意...
在Java中,判断一个整数是否为奇数时,应避免使用i%2==1的表达式,因为当整数i为负数时,例如-1%2的结果为-1,这并不是奇数。正确的做法是使用i%2!=0或者(i&1)!=0来判断一个整数是否为奇数。其中(i&1)的运算结果是将...
本章将对欧姆龙ST语言编程的基本步骤和方法进行讲解,包括编程环境的设置、编程语言的基本语法、编程注意事项等。 2.1 编程环境的设置 在开始编程之前,需要首先设置编程环境。CX-Programmer 6.1是欧姆龙官方推荐...
在讨论UG数控加工编程过程中应注意的事项时,需要关注的核心知识点包括数控加工生产中的常见质量问题、问题产生的原因、加工策略与参数选择的调整以及UG数控编程中的具体注意事项。 首先,数控加工过程中的常见质量...
1. 数据对象模型:在冯·诺依曼架构的计算机中,数据和代码存储在内存中,每个内存位置都有一个地址和对应的二进制值。 2. 指针变量的特殊性:指针是一个特殊的变量,存储的是内存地址,通过这个地址可以间接访问和...
本篇将深入探讨C++在编程中,特别是游戏编程中需要注意的关键问题。 一、内存管理 C++的一大特点是直接控制内存,这包括动态内存分配与释放。程序员需要明确地使用`new`和`delete`操作符来申请和释放内存。不恰当...
在本篇文件中,我们将讨论编程人员在使用ASP.NET开发应用程序时需要注意的10个技巧,这些技巧涉及从缺省的控件、表单名的改变到StringBuilder类的使用,有助于编程人员能够尽快地适应.NET环境。
在西门子PLC编程中,TIA Portal(Totally Integrated Automation Portal)是一个集成化的工程软件平台,它集成了STEP7编程软件,用于创建自动化解决方案。在这其中,常见问题的汇总对于工程师们来说是非常宝贵的资源...
在CICS编程中,有一些重要的注意事项需要遵循,这些注意事项对于提高程序的效率、稳定性和可维护性都有重要作用。 首先,CICS事务处理是CICS的核心概念,它是对一个或多个数据库或文件的处理单元。每个CICS事务都有...
标题中的"C#中文编程示范编译器"是一个项目或软件,它旨在帮助用户进行中文编程。在C#语言中,中文编程通常指的是使用中文作为代码的标识符、变量名、函数名等,使得代码更易于理解和阅读,尤其对于中文背景的...
在宝马汽车的编程过程中,确保遵循正确的步骤和注意事项至关重要,以避免潜在的设备损坏和编程中断。以下是对宝马编程的一些详细说明和要点: 1. 使用正版工具:宝马编程需要专用的电脑工具,如OPS加SSS、ISSS加...
单片机 C 语言编程应注意的若干问题 1 单片机 C 语言主要特点 2 单片机 C 语言与标准 C 语言的区别 2.1 数据类型的选用 2.2 算法设计问题 3 数据存储器的分配 .................
ug编程与加工注意事项
如果电源或缓冲区中的一个错误触发一个事件,则 CPU 操作系统访问 OB81。错误纠正后,重新访问 OB81。如果电池故障情况下,如果电池检测中的 BATT.INDIC 开关是激活的,则 S7-400 仅访问 OB81。 4. S7 CPU 上的 I/O...
从编程语言的特性理解,到硬件资源的合理使用,再到算法优化和代码质量保证,每一个环节都需要编程者细心规划和精心实现。这样才能够确保单片机系统能够高效、稳定地运行,满足各种嵌入式应用的需求。
介绍C编程中的一些经验与教训,在开C程序时应注意的问题
分析和讲述了单片机编程过程中要注意的一系列事项,对编程方法做了分析,是一份ppt的文档。
1. 强调封装:在C语言中,数据和函数是分离的,而在Java中,数据和函数被封装在一个类中,增强了代码的安全性和可维护性。 2. 继承与多态:Java支持类的继承,允许子类继承父类的属性和方法,多态则允许不同类的对象...
在单片机编程的过程中,如果一名设计者能够同时掌握多门...本文特意为大家整理了拥有嵌入式编程领域多年工作经验的工程师意见,汇总成了一篇能够对嵌入式编程经验有着指导意义的注意事项,感兴趣的朋友快来看一看吧。