好文档就是一把金锄头!
欢迎来到金锄头文库![会员中心]
电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

易语言优化教程.docx

10页
  • 卖家[上传人]:M****1
  • 文档编号:456813485
  • 上传时间:2022-09-24
  • 文档格式:DOCX
  • 文档大小:29.60KB
  • / 10 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • 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 用于删除一个计时器除上面这些之外,对象的载入和卸载还包括:建立与删除场景、载入与卸载DL L、捕获与释 放鼠标、置与重置父窗口、载入与卸载皮肤、分配与释放内存、打开与关闭对话框、创建与 释放压缩包、添加与删除提示、注册与撤消热键、创建与销毁线程、播放文件与关闭播放等 等很多,其中有一些在易友所编写的易模块、支持库中有所反映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)返回(“今天是:星期五”)如果真结束如果真(星期=刀 返回(“今天是:星期六”) 如果真结束、更精简的流程控制命令方法: 子程序:取星期 返回值类型:文本型 局部容器:星期 数据类型:整数型 星期=取星期几(取现行时间())判断區期=1)返回 (“星期日”)默认返回 (“星期” + 数值到大写 (星期 - 1, 真))判断结束三、多项选择方法:子程序:取星期返回值类型:文本型局部容器:星期 数据类型:整数型 星期=取星期几(取现行时间())返回(多项选择(星期, “星期日”, “星期一”, “星期二”, “星期三”, “星期四”, “星 期五”, “星期六”))以上三种代码中,第一种代码可能是一般人首先想到的,因为各个星期几的性质的一样的 所以很容易就用到“如果真”或多项判断,其中多是受到思维定势的影响。

      首先想到用这种 方法或第二种方法的人应该比较普遍,因为较容易理解而第二种方法是在第一种方法上的进一步精简当用第一种代码时,可能你会想,每增加一 个选择项,就要增加一个“如果真”或“判断”,代码行是不是多了一点于是你想到星期 值除了星期日,对应的星期几比它多1,于是你就想到 返回 (“星期” + 数值到大写 (星 期 - 1, 真))也有一部分人首先想到的是这种方法,一般来说头脑比选第一种方法的人更 快捷,更容易接近事物本质 选第三种方法的人一般对命令运用较娴熟,思考也更快捷、直击事件本质所以当你想精简 代码时,就可以考虑运用后两种更简便的方法从上可知,要培养你的编程思路,一要对易语言的语法、命令等各方面都要熟悉,二是要花 一点时间来优化、精简你的代码,三是尽量摆脱思维惯性,培养思维的快捷性,扩展编程视 野5、从数值运算看程序代码的优化 有人说易语言不讲究算法,不是这样的易语言的编程原理跟其他编程语言一样,哪有不讲 究算法的道理?易语言跟其他编程语言一样都要优化代码、讲究编程效率下面试举一例说 明在易语言中如何优化代码我们还在读书的时候,常会接触一些数学智力题,比如当最大数为n时计算下面算式的值: 1-2+3-4+5-6+7 +n我相信没有哪个同学会这样计算:先算1-2的结果,再算1-2+3的结果、、、一步一步这样算 下去。

      这种计算方法很慢,太笨了有些计算能力比较强的同学可能会较快找到好的方法得 到正确的结果编程的运算原理跟我们数学的计算方法差不多,一般来说,在数学中好的运算方法用到编程 中也是好的,在数学中不好的方法在编程中也会不好下面我们就用编程的方法计算上面算 式的值来说明这一点,我们编制一个子程序"运算最大值"来完成这项功能可能一般人首先想到的是下面这种方法: 子程序:运算最大值 返回值类型:长整数型 参数:最大值 数据类型:长整数型 局部容器:临时值 数据类型: 长整数型局部容器:循环值 数据类型:整数型局部容器:标记值 数据类型:整数型临时值=0标记值=1如果真(最大值W 0)信息框 (“错误: 最大值 必须 > 0”, 0, )结束 ()如果真结束计次循环首 (最大值, 循环值)临时值=临时值+标记值X循环值标记值 =-1 X 标记值计次循环尾 () 返回 (临时值)上面的步骤肯定可以得到正确的答案但是只要你测试一下,就会发现:当最大值为很大时, 程序的执行速度非常慢在程序开发中,程序的运行效率很重要,能让CPU少执行一条指 令都是好的,让我们看看这个程序还有什么可以修改的地方,把程序优化一下。

      我们修改为 下面的代码看看: 子程序:运算最大值返回值类型:长整数型 参数:最大值 数据类型:长整数型 局部容器:临时值 数据类型: 长整数型局部容器:循环值 数据类型:整数型局部容器:标记值 数据类型:整数型临时值=0标记值=1循环值=1如果真(最大值W 0)信息框 (“错误:最大值 必须 > 0”, 0, )结束 ()如果真结束判断循环首(标记值W最大值)临时值=临时值+循环值循环值=—循环值如果(循环值> 0)循环值=循环值+ 1否则循环值=循环值一1如果结束标记值=标记值+ 1判断循环尾 ()返回 (临时值)经测试上面代码的执行速度比第一种代码快了一点点,原因是加法运算会比乘法运算快,而 代价仅仅是增加了一个整数型变量但是当最大值为很大时,运算速度仍然很慢也就是说 这个程序仍然不能达到要求,还应该有更优的方案更优的方案是: 子程序:运算最大值 返回值类型:长整数型参数:最大值数据类型:长整数型如果真(最大值W 0) 信息框 (“错误:最大值 必须 > 0”, 0, )结束 ()如果真结束如果(最大值% 2 = 0)返回(最大值宁2 X -1)否则返回((最大值一1)宁2 X -1 +最大值)如果结束运用上面的方法,计算结果好象即算即出。

      在数学中的最好计算方法是不是这种方法?怎么 样?想到了吗?没错,当最大值很大很大的时候这三种程序的运行时间简直是天壤之别!所 以,不要认为 CPU 运算速度快就把。

      点击阅读更多内容
      关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
      手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
      ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.