选择显示字体大小

优化之路:精简vb程序的代码

  在多数代码优化技术中都包括了从代码中删除不必要的元素,而下面元素的长度和数量是无须限制便可删除的:

  1.标志符名称

  2.注释

  3.空行

  其他元素,如变量、窗体和过程,确实要占用内存的一部分空间, 最好将它们精简以使效率更高。当应用程序作为一个.exe文件运行时,有几项技术可用于缩小应用程序所需内存。以下技术可缩小代码大小:

  1.减小加载窗体数目

  2.减小控件数目

  3.用标签代替文本框

  4.保持数据在磁盘文件和资源中,并且只在最需要时才加载

  5.组织模块

  6.考虑替换variant数据类型

  7.使用动态数组,并在删除时回收内存空间

  8.消除死代码和无用的变量

  9.回收被字符串和对象变量用过的空间

  一、每一个加载的窗体,无论是与否,都要占用一定数量的内存(其数量随着窗体上控件的类型和数量,以及窗体上位图的大小等不同而有所改变)。所以,为了节约内存,我们只在需要时才加载窗体,不需要时卸载窗体(而不是隐藏窗体)。记住:任何对窗体的引用,和对用new声明的窗体变量的引用,都会导致vb加载该窗体。

  当使用unload方法卸载窗体时,只能卸载释放掉部分窗体所占的空间。若想释放所有空间,可用关键字nothing使窗体的引用无效,如:

  set from=nothing

  二、设计应用程序时,窗体应尽量少用控件。实际的限制取决于控件的类型和系统。实际上,含有大量控件的窗体将运行缓慢。一项与之相关的技术就是:在设计时,尽可能使用控件数组,而不是在窗体上放置大量同类型的控件。

  三、标签控件占用的windows资源比文本框少,因此,在可能的情况下,应使用标签代替文本框。

  例如,当窗体上需要一个隐藏的控件保存文本时,使用标签应该更为有效。如果是需要大量文本域的数据输入窗体,也可以用这种技术优化。这时,我们可以针对每一个域创建一个标签,并使用单文本框输入,在lostfocus事件中移动它到下一个标签的位置:

prirate sub label1_lostfocus 
update label1
label1.option=text1.text
text1.move label2.leftlabel2.top
text1.text1 contents
text1.text=label2.caption
end sub

  通过适当设置backcolor和borderstyle的属性,可以使标签看起来像文本框,虽说这会需要更多的代码,但对于含有大量文本域的窗体,它可以大大地减少资源的使用。

  四、在设计中,直接放入应用程序的数据(像属性或代码中的文字字符串和数值)将增加运行时程序占用的内存。运行时从磁盘文件和资源中加载数据可以减少内存占用。这对大的位图和字符串特别有价值。

  五、vb只在需要时才加载模块,即当代码调用模块中的一个过程时,模块才被加载到内存中。若从未调用一特定模块中的过程,vb决不会加载该模块。因此,尽量把相关的过程放在同一个模块中,让vb只在需要时才加载模块。

  六、variant数据使用极其灵活,但占用内存大。所以,我们应考虑用其他数据类型代替variant变量,特别是替代variant变量数组。

  每一个variant占用16个字节,而integer占用2个字节,double占用8个字节,长字符串变量占用4个字节,加上字符串中每一个字符占用1个字节,共5个字节。但variant字符串变量会占用16个字节,再加上字符串中每一个字符占用一个字节。因为它们太大,消耗堆栈空间特别快,所以特烦人,尤其是在作局部变量或过程的参数时。但有些情况下,variant变量的灵活性又能给程序带来极大的方便,所以,用不用这项优化技术应根据应用程序的情况来作取舍。

  七、这项技术相信大家并不陌生。动态数组可用erase或redim preserve收回数组所占用的内存。例如:erase myarray,erase用于完全删除数组;redim preserve则只缩短数组而不丢失其内容:

  redim preserve myarray10smallernum

  删除固定数组不能收回它占用的内存空间,只可简单地清除数组内每一个元素。如果元素是字符串,或包含字符串或数组的variant变量,那删除数组可回收这些字符串或variant变量所占用的内存,而不是数组本身所占用的内存。

  八、当过程结束时,可自动回收(非静态)局部字符串和数组变量所占用的内存空间。但是,全局、模块级的字符串和数组变量一直存活到整个程序结束。要使应用程序尽量小,应尽可能地回收这些变量所占用的空间。

  九、再开发和修改程序时,可能遗留了一些死代码——代码中的一个完整过程,而它并没有被任何地方调用,也可能声明了一些不用的变量。虽然再创建.exe文件时,vb确实可删除无用的常数,但不能删除无用的变量和死代码。

  要消除死代码,可在”编辑“菜单中,使用”查找“命令搜索特定变量的引用;或者,当每个模块都含有option explicit语句时,通过删除或注释该变量的声明,并运行应用程序,可迅速发现变量是否被调用,若被调用,则vb会出错,否则就没被使用。


 


关键字 本文所属关键字

相关 与本文相关文章

分类 所有文章关键字导航

源码编程相关

Java   Asp   PHP   .Net   XML   C/C++   CGI   VB   Jsp   J2ee   J2se   J2me   EJB   Servlet   Tomcat   Resin   Struts   Weblogic   Eclipse   ANT   GUI   JMS   Web servise   IDEA   Webphere   Hibernate   Spring   Jboss   Applet   Swing   Socket   Javamail   Perl   Ajax   P2P   安全   模式   框架   测试   开源   游戏

SQL数据库相关

My-SQL   Ms-SQL   Access   DB2   Oracle   Sybase   SQLserver   索引   存储过程   加密   数据库   分页   视图  

手机无线相关

3G   Wap   CDMA   GRPS   GSM   IVR   彩信   短信   无线   增值业务

网页设计制作相关

HTML   CSS   网页配色   网页特效   Javascript   VBscript   Dreamweaver   Frontpage   JS   Web   网站设计

网站建设推广相关

建站经验   网站优化   网站排名   推广   Alexa

操作系统/服务器相关

Windows XP   Windows 2000   Windows 2003   Windows Me   Windows 9.x   Linux   UNIX   注册表   操作系统   服务器   应用服务器

图形图像多媒体相关

Photoshop   Fireworks   Flash   Coreldraw   Illustrator   Freehand   Photoimpact   多媒体   图形图像

标准 网站致力的规范

Valid CSS!

无不良内容,无不良广告,无恶意代码

Valid XHTML 1.0 Transitional

creativecommons