易语言edb数据库操作编写一个对话框,输入一个词自动搜索数据库并反馈出来,如果没有则自动建立一个数据库。

易语言常见问题及回答_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
评价文档:
喜欢此文档的还喜欢
易语言常见问题及回答
阅读已结束,如果下载本文需要使用
想免费下载本文?
把文档贴到Blog、BBS或个人站等:
普通尺寸(450*500pix)
较大尺寸(630*500pix)
你可能喜欢易语言,怎么弄一个按钮点击打开通用对话框 把Txt文件里面的内容 导入到数据库里面呢?_百度知道
然后分割文本出学生的姓名,然后边导入到数据库边导入到超级列表框,学号以及抽到次数。<file fsid="" link="/share/link?shareid=463236&uk=" name="问题导入数据库简单的说明就是读取txt每行数据。源码已经上传
大哥 不行啊 我把源文件给你 你帮我看下吧 QQ 加我下 我发邮箱给你谢谢
什么不行,我的源码自己测试了啊,可以啊,你的源码就发百度网盘,我不上Q的
其他类似问题
为您推荐:
易语言的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁易语言程序优化专题|易语言培训与教程 - 易语言汉语编程官方论坛 - Powered by phpwind
查看完整版本: [--
易语言程序优化专题
1、对象的载入与卸载 有时我们会发现,用易语言测试运行一些朋友编写的易程序,当退出后,鼠标指针一直呈箭头及沙漏形状,甚至会死机。原因可能是该程序还没有完全退出,还有一些对象数据留驻内存。对象会占用相当程序的内存及系统资源。作个假设,如果你在退出程序时不关闭打开的数据库,那么多次打开程序并退出后,可能会引起内存泄漏事件而导致很快死机。故如果我们载入了某个对象,在使用完后要卸载对象释放资源,这是绝对有必要的。 有些编程语言甚至在建立变量、数组、常量及窗口对象后,在程序退出时又要销毁它们。但易语言不用,因为在退出易程序时,它已自动帮你做了这些工作。但有很多对象是无法在程序退出时自动销毁的,故需要编写代码来卸载这些对象。下面列举一些对象在易语言中怎样载入和销毁的例子。
一、易语言内部命令中的对象载入和卸载
1、打开数据库与关闭数据库
载入数据库用“打开”命令,卸载或销毁数据库用“关闭”或“全部关闭”命令。
2、打开文件与关闭文件
打开文件用“打开文件”命令,关闭文件用“关闭文件”或“关闭所有文件”命令。
3、载入图片与卸载图片
有时不一定要在退出程序时卸载被载入的图片,因为如果某图片被载入后未被卸载,在易程序退出时将自动被卸载。但退出时用代码卸载保险一点。
二、API函数中的对象载入和卸载
1、获取设备环境与释放设备环境
由GetDC函数获取的设备环境必须用ReleaseDC函数释放;由BeginPaint函数获取的设备环境要用EndPaint函数释放。
2、创建画笔与删除画笔
使用画笔之前必须事先定义一个画笔句柄。形式如下:
HPEN(hP)
然后调用函数GetStockObject获取Windows系统定义的四种画笔例如获取画笔BLACK_PEN的形式如下:
hP=GetStockObject(BLACK_PEN)
创建画笔后,必须调用SelectObject函数将其选入设备环境。不再使用当前画笔时,需用DeleteObject删除画笔,以免占内存。
3、建立画刷句柄与删除画刷句柄
使用画刷需事先定义一个画刷句柄。形式如下:
HBRUSH(画刷句柄)
然后调用函数GetStockObject获取Windows系统提供的7种画刷;不使用画刷时,可用DeleteObject删除画刷,释放内存。
4、载入位图与释放位图
用LoadBitMap加载位图并获得位图的句柄,用DeleteObject来释放位图或其他对象。
5、打开剪贴板与关闭剪贴板
打开剪贴板由应用程序调用OpenClipboard 函数完成;关闭剪贴板由应用程序调用函数CloseClipboard完成。
6、创建计时器与删除计时器
SetTimer用于建立一个计时器,KillTimer用于删除一个计时器。
除上面这些之外,对象的载入和卸载还包括:建立与删除场景、载入与卸载DLL、捕获与释放鼠标、置与重置父窗口、载入与卸载皮肤、分配与释放内存、打开与关闭对话框、创建与释放压缩包、添加与删除提示、注册与撤消热键、创建与销毁线程、播放文件与关闭播放等等很多,其中有一些在易友所编写的易模块、支持库中有所反映。
 
[此贴子已经被作者于 14:51:45编辑过]
2、让你的易程序启动快一点
有时是否觉得你的应用程序启动得太慢了?你可以用下面小技巧让你的程序启动起来感觉快一点: 在“__启动窗口_创建完毕”事件子程序的第一行或其他适当位置加入下面一行代码:
_启动窗口.可视 = 真
点评:易语言在窗口显示前一般先执行“__启动窗口_创建完毕”事件中的程序,如果你在“__启动窗口_创建完毕”中加入大量代码或载入庞大的数据库,就可能导致易程序执行代码很久而不显示窗口。我们在“__启动窗口_创建完毕”事件的第一行强制加入“ _启动窗口.可视 = 真”让窗口先显现出来,这样给人感觉程序运行好象就快了点。
加上这一句,程序窗口就会先显示出来再说,保险一点。
3、[转帖]让易语言编译的程序更小作者:MSG]Hearson
一、引言
易语言3.x独立编译的程序相对于2.x版本的来说,执行效率提高了,代码也短了。但是还是让人觉得
颇为臃肿,什么程序也不写,编译出来的动辄就400多k。那么有什么好的方法吗?请往下看。
二、操作方法
吴老大在几个月以前发表了 易语言支持库开发技术文档 里面对易支持库开发有详细的说明。因为支持库是一个dll文件,那么,也就可以用其它编程工具来编写这个支持库。里面还有有关 *.fn? 的后缀名含义的说明:
支持库文件名的后缀必须固定为.fnx,其中x为一类型字母,目前有意义的后缀有: 1、“.fne”: 带编辑信息、有运行支持代码的支持库; 2、“.fnl”: 带编辑信息、无运行支持代码的支持库; 3、“.fnr”: 不带编辑信息、有运行支持代码的支持库; [/QUOTE]
由于编译时打入文件的支持库后缀名为*.fnr,而每个支持库均为dll动态连接库,dll是win32 pe文件,那么我们就可以使用一些已经存在的pe文件压缩工具对*.fnr文件进行压缩。我用的是upx。
[QUOTE] upx -9 krnln.fnr upx -9 dp1.fnr upx ......
 
这样,打入编译文件的支持库就小很多。再经过编译时的压缩,使目标文件更小。我的一个程序,压缩支持库以前有400多k,现在只有386k。
三、期望
由于 系统核心支持库 为必包含的文件,希望吴老大能把这个支持库进行分割,以求更小的编译文件。
今天凌晨刚被斑竹删帖,写一篇文章将功补过。
4、从几种判断星期几的方法看编程思路
思考下面的判断星期几的多种程序实现方法,从中选择更好的方法,可以开拓我们的编程视野,锻炼编程思维的灵活性。
“取星期几”命令是返回一个值为 1 到 7 之间的整数,表示一个星期中的某一日。星期日为 1,星期一为 2,依此类推。为什么这样?因为西方的每个礼拜周是从星期日算起的,到星期一、星期二、、、星期六是周末,而西方的礼拜假在周始日,即星期日和星期一放假。易语言的“取星期几”命令其实是沿用西文编程的习惯,所以无法直接获取星期几,所以我们要自制一个函数来完成这项功能。一、流程控制方法:子程序:取星期返回值类型:文本型星期 = 取星期几 (取现行时间 ())如果真 (星期= 1)返回(“今天是:星期日”)如果真结束如果真 (星期= 2)返回(“今天是:星期一”)如果真结束如果真 (星期 = 3)返回(“今天是:星期二”)如果真结束如果真 (星期 = 4)返回(“今天是:星期三”)如果真结束如果真 (星期 = 5)返回(“今天是:星期四”)如果真结束如果真 (星期= 6)返回(“今天是:星期五”)如果真结束如果真 (星期 = 7)返回(“今天是:星期六”)如果真结束二、更精简的流程控制命令方法:子程序:取星期返回值类型:文本型局部容器:星期 数据类型:整数型星期 = 取星期几 (取现行时间 ())判断 (星期 = 1)返回 (“星期日”)默认返回 (“星期” + 数值到大写 (星期 - 1, 真))判断结束三、多项选择方法:子程序:取星期返回值类型:文本型局部容器:星期 数据类型:整数型星期 = 取星期几 (取现行时间 ())返回(多项选择(星期, “星期日”, “星期一”, “星期二”, “星期三”, “星期四”, “星期五”, “星期六”)) 以上三种代码中,第一种代码可能是一般人首先想到的,因为各个星期几的性质的一样的,所以很容易就用到“如果真”或多项判断,其中多是受到思维定势的影响。首先想到用这种方法或第二种方法的人应该比较普遍,因为较容易理解。 而第二种方法是在第一种方法上的进一步精简。当用第一种代码时,可能你会想,每增加一个选择项,就要增加一个“如果真”或“判断”,代码行是不是多了一点。于是你想到星期值除了星期日,对应的星期几比它多1,于是你就想到 返回 (“星期” + 数值到大写 (星期 - 1, 真))。也有一部分人首先想到的是这种方法,一般来说头脑比选第一种方法的人更快捷,更容易接近事物本质。 选第三种方法的人一般对命令运用较娴熟,思考也更快捷、直击事件本质。所以当你想精简代码时,就可以考虑运用后两种更简便的方法。 从上可知,要培养你的编程思路,一要对易语言的语法、命令等各方面都要熟悉,二是要花一点时间来优化、精简你的代码,三是尽量摆脱思维惯性,培养思维的快捷性,扩展编程视野。
[此贴子已经被作者于 14:56:17编辑过]
5、从数值运算看程序代码的优化
有人说易语言不讲究算法,不是这样的。易语言的编程原理跟其他编程语言一样,哪有不讲究算法的道理?易语言跟其他编程语言一样都要优化代码、讲究编程效率。下面试举一例说明在易语言中如何优化代码。 我们还在读书的时候,常会接触一些数学智力题,比如当最大数为n时计算下面算式的值: 1-2+3-4+5-6+7......+n 我相信没有哪个同学会这样计算:先算1-2的结果,再算1-2+3的结果、、、一步一步这样算下去。这种计算方法很慢,太笨了。有些计算能力比较强的同学可能会较快找到好的方法得到正确的结果。 编程的运算原理跟我们数学的计算方法差不多,一般来说,在数学中好的运算方法用到编程中也是好的,在数学中不好的方法在编程中也会不好。下面我们就用编程的方法计算上面算式的值来说明这一点,我们编制一个子程序"运算最大值"来完成这项功能。 可能一般人首先想到的是下面这种方法:
 
子程序:运算最大值返回值类型:长整数型
参数:最大值
数据类型:长整数型
局部容器:临时值
数据类型:长整数型局部容器:循环值
数据类型:整数型局部容器:标记值
数据类型:整数型
临时值 = 0标记值 = 1如果真 (最大值 ≤ 0) 信息框 (“错误: 最大值 必须 & 0”, 0, ) 结束 ()如果真结束计次循环首 (最大值, 循环值) 临时值 = 临时值 + 标记值 × 循环值 标记值 = -1 × 标记值计次循环尾 ()返回 (临时值)
上面的步骤肯定可以得到正确的答案。但是只要你测试一下,就会发现:当最大值为很大时,程序的执行速度非常慢。在程序开发中,程序的运行效率很重要,能让CPU少执行一条指令都是好的,让我们看看这个程序还有什么可以修改的地方,把程序优化一下。我们修改为下面的代码看看:
子程序:运算最大值返回值类型:长整数型
参数:最大值
数据类型:长整数型
局部容器:临时值
数据类型:长整数型局部容器:循环值
数据类型:整数型局部容器:标记值
数据类型:整数型
临时值 = 0标记值 = 1循环值 = 1如果真 (最大值 ≤ 0) 信息框 (“错误:最大值 必须 & 0”, 0, ) 结束 ()如果真结束判断循环首 (标记值 ≤ 最大值) 临时值 = 临时值 + 循环值 循环值 = -循环值 如果 (循环值 > 0)
循环值 = 循环值 + 1 否则
循环值 = 循环值 - 1 如果结束 标记值 = 标记值 + 1判断循环尾 ()返回 (临时值)
经测试上面代码的执行速度比第一种代码快了一点点,原因是加法运算会比乘法运算快,而代价仅仅是增加了一个整数型变量。但是当最大值为很大时,运算速度仍然很慢。也就是说这个程序仍然不能达到要求,还应该有更优的方案。更优的方案是:
子程序:运算最大值返回值类型:长整数型
参数:最大值
数据类型:长整数型
如果真 (最大值 ≤ 0) 信息框 (“错误:最大值 必须 & 0”, 0, ) 结束 ()如果真结束如果 (最大值 % 2 = 0) 返回 (最大值 ÷ 2 × -1)否则 返回 ((最大值 - 1) ÷ 2 × -1 + 最大值)如果结束
运用上面的方法,计算结果好象即算即出。在数学中的最好计算方法是不是这种方法?怎么样?想到了吗?没错,当最大值很大很大的时候这三种程序的运行时间简直是天壤之别!所以,不要认为CPU运算速度快就把所有的问题都推给它去做,程序员应该将代码优化再优化,我们自己能做的决不要让CPU做,因为CPU是为用户服务的,不是为我们程序员服务的。
6、错误处理例程详解
程序错误一般归结为三大类:编译错误(代码行不能确定的错误)、运行错误(无法运行的错误)、逻辑错误(不能达到你设定的目标的错误)。 测试运行过程中当出现运行错误时,在易语言的输出框提示错误信息并用箭头指示出错代码行。而运行错误有两种情况,一种是运行后立即提示错误的错误,如错误(10004) 指定窗口单元名称“编辑框2”未找到、现行容器或参数不能接受空数据、现行容器或参数的数据类型与传递给它的数据的类型不一致、被调试易程序读写了非法内存地址、被调试程序堆栈溢出,等。一种是在具体操作程序时(比如单击按钮)才出现错误提示,如除数为零、数组下标越界、用户操作错误等。第一种情况比第二种情况更容易发现一点。
数组成员下标小于1和超过成员数都是属于数组下标越界!!!
比如说,“数组[索引]”共有10成员,那么就不允许“数组[0]”出现,因为易语言的数组成员下标是从1算起。该数组也不也许“数组[11]”出现(超过了限定的10个成员数),否则就会产生数组下标越界错误。 也就是说该数组的最小下标为1,最大下标为10,不在这个范围就是数组下标越界。
二、错误处理例程。
一生一次所说的就是一种错误处理程式,为了防止程序运行错误而导致程序中止运行所采取的一种预防措施,但是一生一次的代码并没有达到防止程序中止运行的目的,还要修改代码,比如去掉“结束()”这一行,但是还要继续防止操作时数组下标越界,所以还要加上数组下标越界时的处理语句,当数组下标越界时,用信息框提示错误。 程序有时会出现运行错误,比如:错误(10004) 指定窗口单元名称“编辑框2”未找到、除数为零、现行容器或参数不能接受空数据、现行容器或参数的数据类型与传递给它的数据的类型不一致、被调试易程序读写了非法内存地址、被调试程序堆栈溢出,等等。程序出现运行错误时就会中止运行,假设程序运行到紧要之处突然出现运行错误而中止运行,很可能会给你带来损失。 在这里我们主要了解一下在程序中怎样加入错误效验语句。
有人可能要问,既然易语言对于程序错误有出错提示,为什么还要在程序中加入错误效验语句呢?诚然易语言有强大的错误处理功能,但由于出错原因五花八门,易语言也不可能面面俱到。同时程序出错常常会中止运行,假设你正在处理数据,已经花了数小时,如果程序突然出错而中止运行,那你数小时甚至更长时间的心血就会付之东流了。这时加入出错效验语句,当程序出错时,执行其他语句或询问保存,就有可能会防止数据丢失。
错误处理程序有多种,比如除数为零的处理、文件(包括数据库文件)打开失败的处理、通用对话框打开失败的处理、数组下标越界的处理、用户操作错误的处理,等等。下面试举一例说明怎样进行错误处理。
【例程1】、除数为零的处理。
当除数为零时会终止程序运行,我们可以加入错误效验语句制止这种现象。例程设计界面如图7-1-9所示。例程代码如下:
子程序名 返回值类型 备注 _按钮1_被单击
如果 (到数值 (编辑框2.内容) = 0)
信息框 (“除数不能为零!请返回重填”, 0, )
编辑框3.内容 = 到文本 (到数值 (编辑框1.内容) ÷ 到数值 (编辑框2.内容))
(图7-1-10)
运行效果如图7-1-10所示。
很多编程用户(包括其他编程语言的用户)都不习惯进行错误处理,那么你编的软件很可能会给你的用户带来问题,故而大家很有必要学习一下错误处理的程式。有时很简单,加个“如果”语句,判断出现错误时弹出信息框。
7、关于支持库开发规则的建议(简称b氏18条)
1、命名习惯要尽量跟飞扬易语言的命名习惯相一致(包括库名和命令名等)。
2、一般命令的命名方法是飞扬法:动词+名词。 3
、命令标识符应当直观且可以拼读,可望文知意,不必进行"解码"。
4、命名尽量简洁。命令标识符的长度应当符合"长度小、信息少"的原则。
5、命令名不要跟原有的系统命令相混淆。当要给自己的支持库命名时,要看看会不会跟前面用户制作的支持库及易原有支持库的命名重复。
6、用正确的反义词组命名具有互斥意义或相*****作的子程序、命令等。例如:“置长度()”与“取长度()”。
7、用语要严格准确。比如命名为“取当前路径”而不要命名为“取目前路径”。
8、支持库里各命令的命名风格尽量一致。比如某个命令命名为“相乘”,那么另外的命令就命名为“相除”、“相加”之类而不要命名为“求除数”、“求加数”。
9、按照易语言的习惯,尽量用白话文方式,当然也可以考虑用文言文方式。
10、汉语编程不要用英语来命名(包括参数、变量等),否则易语言就失去意义。
11、将API等改编为支持库要完整反映原著,否则很多人不如用API还好,因为API函数是经过大量经验总结而成,一般人的水平很难超出它。开发支持库不应象开发易模块那么随便,因为这反映的是易语言给人的印象。
12、支持库开发要反复测试,否则支持库命令错误,有可能给用户带来损失,比如文件被修改或丢失、数据被删等。所以支持库命令里考虑加上错误处理程序是必不可少的环节。
13、支持库的解释文本要准确、详细,不要让人产生歧义。
14、支持库的解释文本要按照易语言解释文本的格式去设计,使易语言解释文本的规格一致。
15、要考虑哪些参数可空,哪些参数是必需的。如果不是必需的,就要设为可空,以减少用户输入代码的工夫。
举例:“修改提示标签文本”可以改为“置提示文本”,“修改提示标签背景颜色”改为“置提示签底色”或“置提示底色”或“置提示区底色”,“修改提示标签文本颜色”改为“置提示文本色”或“置提示字色”,“修改提示标签显示时间”改为“置提示时间”,“修改提示标签图标”改为“置提示签图标”或“置提示图标”或“置提示区图标”。我觉得这样较符合飞扬易语言的命令命名习惯。
8、减少程序错误的建议
1、最好将大程序分解成一些小程序,再用调用子程序模块的方式把它们粘结起来,因为程序越小,就越容易隔离错误。
2、每次修改程序的时候都要测试程序。当改变了程序中的三行内容之后,程序运行得很好,那么错误完全可以排除在这三行之外。
3、预先要为应用程序的每一个事件过程和每一个一般过程都规定好明确的目标,如有可能,就写好程序开发文档。
4、在编写程序时要多加注释。没有注释的程序不要说别人看不懂,就是编程人自己过一段时间也会“丈二和尚摸不着头脑”,对于调试维护程序带来很很多不便,许多编程者都深有体会。
5、尽量用中文来命名变量和对象,尽量使用约定的命名方式。比如文本型变量命名为“文本1”、“级别文本”等,数值型数据命名为“数值1”、“××数值”等,按钮对象命名为“评比按钮”、“按钮1”等。但是“按钮1”、“编辑框2”之类的默认命名方式要尽量少用,转而用“姓名框”、“年龄框”、“退出钮”之类的“用途+对象类别”的命令方式。
6、慎重使用复制和粘贴的代码。比如你在程序外复制一段代码粘贴到本程序中,其中有“评比按钮.可视=假”这一行,但本程序中没有“评比按钮”这一对象,运行时就会出现运行错误。
7、尽量用代码设置属性。使用属性窗口设置属性方便而快捷,但也使人难以看出已经作了哪些属性设置。使用代码来设置属性就好象为属性设置建立了一个文档,方便日后维护。
8、当心那些视觉上不易分辨的操作符发生书写错误。我们经常会把“==”误写成“=”,象“||”、“&&”、“&=”、“&=”这类符号也很容易发生“丢1”失误。然而编译器却不一定能自动指出这类错误。
9、变量(数组)被创建之后应当及时把它们初始化,以防止把未被初始化的变量当成右值使用。
10、当心变量的初值、缺省值错误,或者精度不够。
11、当心数组的下标越界。
12、当心忘记编写错误处理程序,当心错误处理程序本身有误。
13、避免编写技巧性很高代码。
14、不要设计面面俱到、非常灵活的数据结构。
15、如果原有的代码质量比较好,尽量复用它。但是不要修补很差劲的代码,应当重新编写。
16、尽量使用支持库命令,不要“发明”已经存在的库命令。
9、如何编写高质量的易语言代码?
下面参考了尘虚缘的意见作了一些修改。
什么是一个高效的软件?一个高效的软件不仅应该比实现同样功能的软件运行得更快,还应该消耗更少的系统资源。程序的时间效率是指运行速度,空间效率是指程序占用内存或者外存的状况。另外程序的效率我们也可以分为全局效率和局部效率。全局效率是指站在整个系统的角度上考虑的效率,局部效率是指站在模块或函数角度上考虑的效率。
1. 使用整数和长整数
  提高代码运行速度最简单的方法莫过于使用正确的数据类型了。也许你不相信,但是正确地选择数据类型可以大幅度提升代码的性能。在大多数情况下,程序员可以将短整数型、小数型和双精度小数型的变量替换为整数(Integer)或长整数(Long)类型的变量,因为易语言处理整数和长整数的能力远远高于处理其它几种数据类型。
  在大多数情况下,程序员选择使用小数型或双精度小数型的原因是因为它们能够保存小数。但是小数也可以保存在整数类型的变量中。例如程序中约定有三位小数,那么只需要将保存在整数型变量中的数值除以1000就可以得到结果。根据我的经验,使用整数和长整数替代短整数型、小数型和双精度小数型后,代码的运行速度可以提高将近10倍。 但是我们也不要老是强调使用使用整数和长整数,因为在程序中数据类型的定义还牵涉一个关键的问题,就是数据的安全,频繁而无规范地定义 数据类型会使算法出现漏洞,是数据的安全和临界判断有问题.对财务和工程计算而言,小数点的精度是很敏感的数据,只能用双精度数据来规范.另外, 换成整型也会导致程序可读性急剧下降.
2. 避免使用通用型数据
  通用型的变量需要16个字节的空间来保存数据,而一个整数(Integer)只需要2个字节。通常使用通用型变量的目的是为了减少设计的工作量和代码量,也有的程序员图个省事而使用它。但是如果一个软件经过了严格设计和按照规范编码的话,完全可以避免使用变体类型。
3. 尽量避免使用属性
  在平时的代码中,最常见的比较低效的代码就是在可以使用变量的情况下,反复使用属性(Property),尤其是在循环中。要知道存取变量的速度是存取属性的速度的20倍左右。下面这段代码是很多程序员在程序中会使用到的:
容器名: 数值 类型:整数型容器名: 容器 类型:整数型 计次循环首(7,容器) 文本1.内容 = 文本1.内容 + #换行符 + 到文本((数值×容器))计次循环尾()
  下面这段代码的执行速度是上面代码的20倍。
容器名: 数值 类型:整数型容器名: 容器 类型:整数型容器名: 文本 类型:文本型
文本 = 文本1.内容 计次循环首(7,容器) 文本 = 文本 + #换行符 + 到文本((数值×容器))计次循环尾()文本1.内容 = 文本
另外要注意,这个涉及一个编程思路, 用属性当变量的作法大多数情况可以简化算法。所以有时候也不能一味强调用变量代替属性。
6. 避免调用很短的子程序
  调用只有几行代码的子程序也是不经济的--调用子程序所花费的时间或许比执行子程序中的代码需要更长的时间。在这种情况下,你可以把子程序中的代码拷贝到原来调用子程序的地方。 但是有时候小的子程序可能会被调用很多次而不是只有两三次,这时就应该调用它。
7. 减少对子对象的引用
  在易语言中,通过使用.来实现对象的引用。例如:
窗口1.编辑框1.内容
  在上面的例子中,程序引用了两个对象:窗口1和编辑框1。利用这种方法引用效率很低。但遗憾的是,没有办法可以避免它。我的“多媒体模块”就有这个缺点。
8. 检查文本型数据是否为空
  大多数易语言用户在检查文本型数据是否为空时会使用下面的方法:
如果 (文本1.内容 = "" ) 注释: 执行操作 结束如果
  很不幸,进行字符串比较需要的处理量甚至比读取属性还要大。因此我建议大家使用下面的方法:
如果 (到数值(文本1.内容) = 0 ) 注释: 执行操作 结束如果
另一个不同的意见是:问题在于当文本字串为 "ABC"之类的非数值型时, 到数值("ABC")=0并不表示为空。文本比较的效率并不低,在底层算法中,一般会直接比较长度才会继续比较内容。
9. 使用数组,而不是多个变量
  当你有多个保存类似数据的变量时,可以考虑将他们用一个数组代替。在易语言中,数组是最高效的数据结构之一。
10. 尽量使用动态数组,而不是静态数组
  使用动态数组对代码的执行速度不会产生太大的影响,但是在某些情况下可以节约大量的资源。
11. 销毁对象
  无论编写的是什么软件,程序员都需要考虑在用户决定终止软件运行后释放软件占用的内存空间。但遗憾的是很多用户对这一点好像并不是很在意。正确的做法是在退出程序前需要销毁程序中使用的对象。例如:关闭数据库:关闭(数据库名称)、全部关闭(),关闭打开(播放)的文件,关闭载入的图片等。 中止程序执行时应该要关闭打开的文件(包括数据库文件、图片文件等),但是窗口销毁对销毁窗口及窗口单元来说是自动的,已足够做释放用,在窗口内最好不要随意销毁窗口单元,可能会导致程序运行中的潜在的单元数据访问而崩溃.只有在图形buffer情况才需要经常销毁。
12. 尽量使用内部子程序,减少易模块的数量
因为从易语言连接到一个外部对象需要耗费大量的CPU处理能力。每当你调用接口函数的时候,都会浪费大量的系统资源。 另外只有在易模块中的接口函数或变量被调用时,易语言才将易模块加载到内存中;当易语言应用程序退出时,才会从内存中卸载这些模块。如果代码中只有一个模块,易语言就只会进行一次加载操作,这样代码的效率就得到了提高;反之如果代码中有多个模块,易语言会进行多次加载操作,代码的效率会降低。
13. 使用对象数组
  当设计用户界面时,对于同样类型的控件,程序员应该尽量使用对象数组。你可以做一个实验:在窗口上添加100个图片框,每个图片框都有不同的名称,运行程序。然后创建一个新的工程,同样在窗口上添加100个图片框,不过这一次使用对象数组,运行程序,你可以注意到两个程序加载时间上的差别。 也有人认为两者从逻辑上看效率应该差不多。
14. 使用窗口单元“移动”方法
  在改变对象的位置时,有些用户喜欢使用“宽度”、“高度”、“顶边”和“左边”属性。例如:
按钮1.宽度 = 100 按钮1.高度 = 100 按钮1.顶边 = 0 按钮1.左边 = 0
  实际上这样做效率很低,因为程序修改了四个属性,而且每次修改之后,窗口都会被重绘。正确的做法是使用Move方法:
按钮1.移动(0,0,100,100)
15. 减少图片的使用
  图片将占用大量内存,而且处理图片也需要占用很多CPU资源。在软件中,如果可能的话,可以考虑用背景色来替代图片--当然这只是从技术人员的角度出发看这个问题。 但是如果为了优化程序界面,使用图形换来的好处可能远胜节约下的资源,否则就不会有XP,也不会有游戏的进步了。
16. 编译优化
易语言的程序编译有三个选项:“编译”、“独立编译”、“编译生成安装软件”。优先使用的次序应该是“编译生成安装软件”、“编译”、“独立编译”,因为“独立编译”会将易语言系统中所有的支持库都编译进去,而“编译生成安装软件”只选择程序中必要的支持库编译。要脱离易语言环境也可以运行,就不要使用“编译”而应用“编译生成安装软件”或“独立编译”。 总结:执行效率和程序可读性永远是对矛盾 ,两者应该通盘考虑;资源占用和程序易用性永远是对矛盾,两者也应该通盘考虑。基于此,下面探讨一些提高程序的效率的规则。
【规则1】不要一味地追求程序的效率,应当在满足正确性、可靠性、健壮性、可读性等质量因素的前提下,设法提高程序的效率。
【规则2】以提高程序的全局效率为主,提高局部效率为辅。
【规则3】在优化程序的效率时,应当先找出限制效率的“瓶颈”,不要在无关紧要之处优化。
【规则4】先优化数据结构和算法,再优化执行代码。先考虑某功能是否可以用函数(命令)来实现,如果找不到这样的函数,再考虑用其他代码实现。
【规则5】有时候时间效率和空间效率可能对立,此时应当分析那个更重要,作出适当的折衷。例如多花费一些内存来提高性能。
【规则6】不要在什么时候都只追求紧凑的代码,因为紧凑的代码并不能产生高效的机器码。
10、试探易语言的命名规则
姑且将我所推荐的易程序命名方法称为"bb88"法,该命名规则的主要思想是"在变量和函数名中加入后缀以增进人们对程序的理解"。我认为这种命名方式适用于汉语编程,故跟英文编程的命名方式有所不同。例如对象可以命名为“有意义的对象名+对象类型”,变量可以命名为“有意义的变量名+变量类型”,比如按钮可以命名为“编辑钮”、“删除钮”、“打开钮”之类;变量可以命名为“循环容器”、“长度文本”、“结果数值”之类。“有意义的对象名”、“有意义的变量名”主要是就对象或变量的功能而言,比如某标签的作用是提示操作方法,那我们就可以将该标签起名为“提示签”,又如某个变量的作用是记录循环的次数,那我们可以将其命名为“循环容器”、“次数”、“循环次数”、“循环变量”之类。 据考察,没有一种命名规则可以让所有的用户赞同,程序设计教科书一般都不指定命名规则。命名规则对软件产品而言并不是"成败悠关"的事,我们不要化太多精力试图发明世界上最好的命名规则,而应当制定一种令大多数用户满意的命名规则,并在项目中贯彻实施。另外说一句题外话,其他编程语言一般把编程者称为程序员,而易语言编程者我们一般称为“易语言用户”、“编程用户”、“用户”之类为好。
本贴围绕探讨易程序命名的共性规则而展开,本贴论述的共性规则是被大多数用户所采纳的,我们应当在遵循这些共性规则的前提下,再扩充特定的规则。
*****规则1*****标识符应当直观且可以拼读,可望文知意,不必进行"解码"。 对于汉语编程来说,与英文编程相反,标识符最好采用中文词语或其组合,便于记忆和阅读。尽量不使用英文或汉语拼音来命名。程序中的中文词语一般不会太复杂,用词应当准确。例如不要把“当前值”写成“目前值”。
*****规则2*****标识符的长度应当符合"长度小、信息少"的原则。 在某些情况下规定名字不准超过6个汉字,但一般情况下可以不受此限制。一般来说,长名字能更好地表达含义,所以子程序名、命令名、变量名长达十几个字符不足为怪。那么名字是否越长约好?不见得! 例如变量名“最小值”就比“跟最小值一样的数值”好用。单字符的名字也是有用的,常见的如“一”、“二”、“三”等,它们通常可用作子程序内的局部变量。
*****规则3*****程序中不要出现仅靠大小写区分的相似的标识符。例如:变量名: x 变量名: X
※ 变量x 与 X 容易混淆子程序名:foo
子程序名: FOO ※ 子程序foo 与FOO容易混淆
*****规则4*****程序中不要出现标识符完全相同的局部变量和全局变量,尽管两者的作用域不同而不会发生语法错误,但会使人误解。
*****规则5*****变量的名字应当使用"名词"或"形容词+名词"或“动词+名词”等。例如:“值”、“老值”、“新值”。
*****规则6*****用正确的反义词组命名具有互斥意义的变量或相*****作的子程序、命令等。例如:“最大值”与“最小值”、“置长度()”与“取长度()”等。
*****建议7*****尽量避免名字中出现数字编号,如“值1”、“值2”、“编辑框1”、“编辑框2”等,除非逻辑上的确需要编号。这是为了防止用户偷懒,不肯为命名动脑筋而导致产生无意义的名字(因为用数字编号最省事)。
*****建议8*****全局变量加前缀“全_"或"全局"或"全"或“全—”或“q”(quan)。如“全-播放中”或“Q播放中”,这样在编程中就不会混淆全部变量与局部变量、程序集变量的区别,易于阅读和排查错误。
11、关于流程控制命令的应用思路
我们用下面两种代码来实现移动文件然后退出程序窗口,如果将要移动的文件就在要移动到的文件夹下,就不移动该文件,怎么做呢?试比较下面两种实现此功能的代码有什么不同:
如果真 (命令参数 [2] = “3”)
如果真 (文件名 ≠ 录象路径 + 文件名3 + 后缀名) 移动文件 (文件名, 录象路径 + 文件名3 + 后缀名)
如果真结束
如果真结束
如果真 (命令参数 [2] = “3” 且 文件名 ≠ 录象路径 + “\” + 文件名3 + 后缀名)
移动文件 (文件名, 录象路径 + “\” + 文件名3 + 后缀名)
如果真结束
表面上看上面两种代码都能达到目的,但是这两种代码真的可以互换吗?其实只要我们看两者的流程线就能发现它们之间的差别,代码一无论原文件在哪一个位置,移动后都退出程序窗口;而代码二则是如果文件在要移动到的目录下,就不退出程序窗口,假如你想移动后就退出程序窗口,代码二就不能达到目的。所以假如我们用代码二达不到目的,就要变换一下思路,稍为调整一下代码及流程线看看。
为了加深印象,再比较下面两个代码:
移动读写位置 (文件号, , 取文件长度 (文件号)- 11)
如果 (取发音数目 (读入文本 (文件号, 11)) < 1)
移到文件尾 (文件号)
判断循环首 (读入文本 (文件号, 11) ≠ “#文本分割符”) 读写位置 = 读写位置 - 1 移动读写位置 (文件号, , 读写位置)
判断循环尾 ()
移到文件尾 (文件号)
判断循环首 (读入文本 (文件号, 11) ≠ “#文本分割符” 且 读入文本 (文件号, 11)) ≥ 1) 读写位置 = 读写位置 - 1 移动读写位置 (文件号, , 读写位置)
判断循环尾 ()
上面代码要实现的功能是当读入文件最后11字节的数据不包含文本型数据,且找到分割文本时,就停止向前移动读写位置。哪一种代码才适合呢?我们很可能首先想到第二种代码,因为流程线简单。但是如果运用的是第二种代码,你就会发现当读入的不是文本型数据时,读写指针仍然向前移动。原因是什么?原来是子程序运行了两次“读入文本 (文件号, 11) ”,所以第二次运行该代码前指针已在文件尾,无法再读入11字节数据。怎么办?我们可将“且”分解,即将多条件单流程控制转化为多流程单条件控制,即运用代码二。
总结:当我们运用较复杂的流程控制命令出现问题时,可多查看它的流程线,尝试稍为改变一下代码。
习题:还是上面的例子,当要实现每读入11字节的数据中找不到文本数据,且找到分割文本时,就不向前移动读写位置,怎样做到?
12、易语言的多线程机制初探
一、关于多线程冲突问题。
3.6版开始增加了多线程支持库,提供对多线程的支持,并通过实现进入许可证机制以避免多线程冲突。
多线程是这样一种机制,它允许在程序中并发执行多个指令流,每个指令流都称为一个线程,彼此间互相独立。 线程又称为轻量级进程,它和进程一样拥有独立的执行控制,由操作系统负责调度,区别在于线程没有独立的存储空间,而是和所属进程中的其它线程共享一个存储空间,这使得线程间的通信远较进程简单。
多个线程的执行是并发的,也就是在逻辑上“同时”,而不管是否是物理上的“同时”。如果系统只有一个CPU,那么真正的“同时”是不可能的,但是由于CPU的速度非常快,用户感觉不到其中的区别,因此我们也不用关心它,只需要设想各个线程是同时执行即可。
多线程和传统的单线程在程序设计上最大的区别在于,由于各个线程的控制流彼此独立,使得各个线程之间的代码是乱序执行的,由此带来的线程调度,同步等问题,将在下面探讨。
由于同一进程的多个线程共享同一片存储空间,在带来方便的同时,也带来了访问冲突这个严重的问题。
多线程也有它不利的一面。任何时候某个应用程序使用的线程多于一个时,如果多个线程在同一时刻试图使用相同的数据或资源,可能出现麻烦。这种情况一旦出现,程序将变得非常复杂并且难以调试。  更糟的是多线程代码经常在最初开发时运行良好,在形成产品时却往往失败,原因在于有未被发现的多个线程与相同的数据或资源相互作用的情况。这使得多线程编程非常危险。
因此,在编程时需要考虑在多个线程访问同一资源时产生冲突的问题:当一个线程正在访问一个进程对象时,另一个线程要改变该对象,这时可能会产生错误的结果。所以,程序员编程时要解决这种冲突。
  最简单的避免线程冲突的的方法是使线程之间永远不与相同的数据或资源交互。但这不一定可行,对任何多线程程序来说,避免或最小化共享数据或资源应作为一个目标。
二、下面介绍一下在Win32 基础上用API函数进行多线程编程的过程。   1、用Win32函数创建和中止线程   Win32函数库中提供了多线程控制的操作函数,包括创建线程、中止线程、建立互斥区等。首先,在应用程序的主线程或者其它活动线程的适当地方创建新的线程。创建线程的函数如下:   HANDLE CreateThread(LPSECURITY_ATTRIBUTES lpThreadAttributes, DWORD dwStackSize, LPTHREAD_START_ROUTINE lpStartAddress, LPVOID lpParameter, DWORD dwCreationFlags, LPDWORD lpThreadId );   其中,参数lpThreadAttributes 指定了线程的安全属性,在Windows 95中被忽略;dwStackSize 指定了线程的堆栈深度;lpStartAddress 指定了线程的起始地址,一般情况为下面的原型函数:DWORD WINAPI ThreadFunc( LPVOID );lpParameter指定了线程执行时传送给线程的32位参数,即上面函数的参数;dwCreationFlags指定了线程创建的特性; lpThreadId 指向一个DWORD变量,可返回线程ID值。   如果创建成功则返回线程的句柄,否则返回NULL。   创建了新的线程后,则该线程就开始启动执行了。如果在dwCreationFlags中用了CREATE_SUSPENDED特性,那么线程并不马上执行,而是先挂起,等到调用ResumeThread后才开始启动线程,在这个过程中可以调用函数:   BOOL SetThreadPriority( HANDLE hThread, int nPriority);   来设置线程的优先权。   当线程的函数返回后,线程自动中止。如果在线程的执行过程中中止的话,则可调用函数:   VOID ExitThread( DWORD dwExitCode);   如果在线程的外面中止线程的话,则可调用下面的函数:   BOOL TerminateThread( HANDLE hThread, DWORD dwExitCode );   但应注意:该函数可能会引起系统不稳定,而且线程所占用的资源也不释放。因此,一般情况下,建议不要使用该函数。   如果要中止的线程是进程内的最后一个线程,则在线程被中止后相应的进程也应中止。   2、用Win32函数控制线程对共享资源的访问   在线程体内,如果该线程完全独立,与其它的线程没有数据存取等资源操作上的冲突,则可按照通常单线程的方法进行编程。但是,在多线程处理时情况常常不是这样,线程之间经常要同时访问一些资源。例如,一个线程负责公式计算,另一个线程负责结果的显示,两个线程都要访问同一个结果变量。这时如果不进行冲突控制的话,则很可能显示的是不正确的结果。   对共享资源进行访问引起冲突是不可避免的,但我们可用以下办法来进行操作控制:   (1) 通过设置线程的互斥体对象,在可能冲突的地方进行同步控制。   首先,建立互斥体对象,得到句柄:   HANDLE CreateMutex( );   然后,在线程可能冲突区域的开始(即访问共享资源之前),调用WaitForSingleObject将句柄传给函数,请求占用互斥体对象:   dwWaitResult = WaitForSingleObject(hMutex, 5000L);   共享资源访问完后,释放对互斥体对象的占用:   ReleaseMutex(hMutex);   互斥体对象在同一时刻只能被一个线程占用。当互斥体对象被一个线程占用时,若有另一线程想占用它,则必须等到前一线程释放后才能成功。   (2) 设置信号:在操作共享资源前,打开信号;完成操作后,关闭信号。这类似于互斥体对象的处理。   首先,创建信号对象:   HANDLE CreateSemaphore( );   或者打开一个信号对象:   HANDLE OpenSemaphore( );   然后,在线程的访问共享资源之前调用WaitForSingleObject。   共享资源访问完后,释放对信号对象的占用:   ReleaseSemaphore();   信号对象允许同时对多个线程共享资源的访问,在创建对象时指定最大可同时访问的线程数。当一个线程申请访问成功后,信号对象中的计数器减一;调用ReleaseSemaphore函数后,信号对象中的计数器加一。其中,计数器值大于等于0,小于等于创建时指定的最大值。利用信号对象,我们不仅可以控制共享资源的访问,还可以在应用的初始化时候使用。假定一个应用在创建一个信号对象时,将其计数器的初始值设为0,这样就阻塞了其它线程,保护了资源。待初始化完成后,调用ReleaseSemaphore函数将其计数器增加至最大值,进行正常的存取访问
三、下面介绍易语言的多线程编程方法。
通过研究易语言附带的两个多线程例程,总结如下:
(一)、先看易语言对自己的多程机制的解释:
1、创建进入许可证:创建并返回一个进入许可证数值,此许可证值用作进入程序中的指定许可代码区,以避免多线程冲突。
2、删除进入许可证:删除由“创建进入许可证”命令所创建返回的进入许可证,以释放系统资源。
3、启动线程:创建并启动一条线程,可重复使用以创建多条线程。
4、进入许可区:根据已经创建的许可证进入指定许可代码区,在此线程未退出之前,其它线程如要通过同一个进入许可证进入该许可代码区则必须先等待此线程退出许可代码区,从而保证了指定许可代码区在任何时候都只能有一条线程进入并执行。
5、退出许可区:指示当前线程将退出许可代码区,并允许其它使用同一进入许可证的线程进入此许可代码区。
(二)、易语言的多线程编程过程大约如下:
1、先用“创建进入许可证”命令为一个线程进入一个指定的许可代码区建立一个许可证。
2、用“启动线程”命令创建并启动一条线程,以运行一个线程的子程序。
3、在一个线程子程序里用“进入许可区”使该线程占用一个许可代码区,并锁定该代码区不让其他线程进入,并锁定其他线程运行,以避免线程冲突。
4、使用“退出许可区”解锁该许可代码区,以便让其他线程进入。若想使多个线程同时运行,我们可以为每个线程建立一个进入许可证,进入许可区与退出许可区连着进行使多个线程同步运行。
5、当退出程序时,要删除进入许可证以释放系统资源。
(三)、下面的示例代码同时运行两个线程,一个是连续随机画圆,一个是连续随机画矩形:
窗口程序集:窗口程序集1
程序集变量:进入许可证1 数据类型:整数型程序集变量:画圆判断 数据类型:逻辑型程序集变量:画矩形判断
数据类型:逻辑型程序集变量:进入许可证2 数据类型:整数型
══════════════════════════════
子程序:_按钮1_被单击
※ 备注:如果按钮1的标题为“停止画圆”时就开始画圆(画圆判断 = 假),否则如果按钮1的标题为“开始画圆”时就停止画圆(画圆判断 = 真)。
画圆判断 = 取反 (画圆判断)判断 (画圆判断 = 真) 如果 (进入许可证1 ≠ 0)
如果真 (启动线程 (&画圆线程) = 真)
按钮1.标题 = “停止画圆”
如果真结束 否则
信息框 (“创建进入许可证 失败”, 0, ) 如果结束默认 按钮1.标题 = “开始画圆”判断结束
══════════════════════════════
子程序:画圆线程
判断循环首 (画圆判断 = 真) 置随机数种子 () 画板1.刷子颜色 = 取颜色值 (取随机数 (0, 255), 取随机数 (0, 255), 取随机数 (0, 255)) 画板1.画笔颜色 = 取颜色值 (取随机数 (0, 255), 取随机数 (0, 255), 取随机数 (0, 255)) 画板1.画椭圆 (取随机数 (1, 画板1.宽度), 取随机数 (1, 画板1.高度), 取随机数 (1, 画板1.宽度), 取随机数 (1, 画板1.高度)) 进入许可区 (进入许可证1) 退出许可区 (进入许可证1) 延时 (500)判断循环尾 ()
══════════════════════════════
子程序:__启动窗口_创建完毕
进入许可证1 = 创建进入许可证 ()进入许可证2 = 创建进入许可证 ()
══════════════════════════════
子程序:__启动窗口_将被销毁
删除进入许可证 (进入许可证1)删除进入许可证 (进入许可证2)
══════════════════════════════
子程序:_按钮2_被单击
画矩形判断 = 取反 (画矩形判断)判断 (画矩形判断 = 真) 如果 (进入许可证2 ≠ 0)
如果真 (启动线程 (&画矩形线程) = 真)
按钮2.标题 = “停止画矩形”
如果真结束 否则
信息框 (“创建进入许可证 失败”, 0, ) 如果结束默认 按钮2.标题 = “开始画矩形”判断结束
══════════════════════════════
子程序:画矩形线程
判断循环首 (画矩形判断 = 真) 置随机数种子 () 画板2.刷子颜色 = 取颜色值 (取随机数 (0, 255), 取随机数 (0, 255), 取随机数 (0, 255)) 画板2.画笔颜色 = 取颜色值 (取随机数 (0, 255), 取随机数 (0, 255), 取随机数 (0, 255)) 画板2.画矩形 (取随机数 (1, 画板2.宽度), 取随机数 (1, 画板2.高度), 取随机数 (1, 画板2.宽度), 取随机数 (1, 画板2.高度)) 进入许可区 (进入许可证2) 退出许可区 (进入许可证2) 延时 (500)判断循环尾 ()
13、加快表格的读入速度
有人说易语言表格读入数据的速度慢,其实是代码的问题。比如可以采用部分载入的方法,来加快速度和尽量少的占用资源,但这不是根本解决办法。最好的办法就是在向表格填充数据前先把数据源卸掉!这样可以避免每填充一次系统即自动通知处理者一次。在载入数据前先:表格1。数据源=“” , 载入数据后:表格1。数据源=“数据库1”, 这样就飞快了。
示例代码:
子程序:__启动窗口_创建完毕
局部容器:文件内容
数据类型:文本型局部容器:行文本
数据类型:文本型
数组:0局部容器:列文本
数据类型:文本型
数组:0局部容器:索引 数据类型:整数型局部容器:索引2
数据类型:整数型
文件内容 = 到文本 (读入文件 (“txt.txt”))如果真 (文件内容 = “”) 信息框 (“先把TXT.TXT文件放到当前目录”, 0, ) 销毁 ()如果真结束行文本 = 分割文本 (文件内容, #换行符, )表格1.数据源 = “”计次循环首 (取数组成员数 (行文本), 索引) 列文本 = 分割文本 (行文本 [索引], “ ”, ) 计次循环首 (取数组成员数 (列文本), 索引2)
数据源1.置文本 (索引, 索引2, 列文本 [索引2]) 计次循环尾 ()计次循环尾 ()表格1.数据源 = “数据源1”
就是说先断开表格与数据源的联系,然后接上。好,大家以后记得要这样处理了。
[此贴子已经被作者于 16:15:46编辑过]
(转贴改编自VB优化文章)
14、缩小应用程序所需内存的几种方法:
以下技术可缩小代码大小:  1.减小加载窗体数目
每一个加载的窗体,无论是与否,都要占用一定数量的内存(其数量随着窗体上控件的类型和数量,以及窗体上位图的大小等不同而有所改变)。所以,为了节约内存,我们只在需要时才加载窗体,不需要时卸载窗体(而不是隐藏窗体)。记住:任何对窗体的引用,和对窗体变量的引用,都会导致易语言程序加载该窗体。  易语言用“销毁”方法卸载窗体,如:
窗口1.销毁() 2.减少控件数目
设计应用程序时,窗体应尽量少用控件。实际的限制取决于控件的类型和系统。实际上,含有大量控件的窗体将运行缓慢。有可能的话考虑用复制控件的方法。  3.用标签代替编辑框
标签控件占用的Windows资源比编辑框少,因此,在可能的情况下,应使用标签代替编辑框。  例如,当窗体上需要一个隐藏的控件保存文本时,使用标签应该更为有效。如果是需要大量文本域的数据输入窗体,也可以用这种技术优化。  4.保持数据在磁盘文件和资源中,并且只在最需要时才加载
在设计中,直接放入应用程序的数据(像属性或代码中的文字字符串和数值)将增加运行时程序占用的内存。运行时从磁盘文件和资源中加载数据可以减少内存占用。这对大的位图和字符串特别有价值。  5.考虑替换通用数据类型
通用数据使用极其灵活,但占用内存大。所以,我们应考虑用其他数据类型代替通用变量,特别是替代通用变量数组。
  6.消除死代码和无用的变量,尽量不用全局变量。可在代码编辑区用查找命令查找删除无用的代码和变量。
感谢分享。。。
虽然看不懂你在说什么 但是看起来好像很厉害的样子= =
好叼啊~~~~~~~~~~~~~~~~~~你知道你自己写的是什么吗?
这个必须顶啊!
查看完整版本: [--
Powered by
Gzip enabled

我要回帖

更多关于 易语言通用对话框 的文章

 

随机推荐