使用VB技巧解决性能危机

ZDNet软件频道 时间:2002-03-08 作者:ZDNET CHINA 特稿 |  我要评论()
本文关键词:
本文提供了5种性能优化技巧,当程序运行速度出现问题时,你可以在自己的程序中试一试。

高级编辑器优化

从VB5开始,程序员就可以更多的控制VB编辑器。你可以选择让你的应用程序在传统的p-code格式下编译,这是在运行和编译象Win32源代码最基本的方式。把应用程序当成源代码来编译可以实现快速、安全、简单的速度优化。大概要比p-code方式快20倍。但是你应该意识到在源代码编译中存在一些小的非常隐秘的bug。

机会来了,现在实际上你已经在进行源代码编译了(为了提高速度而进行优化),因为在VB6的选项框中有一些缺省值。同时也有一些高级优化按钮供你做更多的选择(图A),这里在特定的环境下可以提高代码速度。

图A


VB6 高级优化

注意我们正在讨论的是编译器转换问题,所以你必须完全编译你的应用程序,并且在VB IDE之外运行它,以注意速度的变化。

这些优化中的每一种方式都会使编辑器对代码、编写方式、移走特定的检查及安全等性能做不同的假定。在这些情况中,所有的switch都会改变编译VB的过程,因此用时一定要小心。

快速看一下每一种优化方式都在做什么:

  • Assume No Aliasing是告诉编辑器在应用程序的不同部分中,同一存储位置不会有两个不同的名字。意思就是说ByRef是不可变的。如果编译器知道了之一点,就可以在寄存器中而不是堆栈中对象存储变量和函数进行优化,因此使性能得以提高。
  • Remove Array Bounds Checks是对于一个给定的数组,防止编辑器检查指定的所有数组名是否都是有效的。每次程序为数组命名时,编译器都要检查这些命名是不是在所声明的数组范围内。如果出界了,VB就会报错,而不会允许访问数组外的内存位置。通过忽略边界检查,VB就会认为这些数组名始终是正确的,无需做二次检查。如果代码中有很多数组操作的话,采用这种优化可以大大提高应用程序的运行速度,但是一定要确信数组名是正确的。
  • Remove Integer Overflow Checks是告诉编辑器不用检查赋予整数变量(字符形、整形、长形、实形)的值是否在此类型的合法范围之内。VB每做一次检查都要检查一遍数据类型。关掉这个check功能就会提高整数运算的速度。但结果是边界外的就会出错,得到负值。例如,给一个整数加1本应是32767,而结果却是-32767。
  • Remove Floating Point Error Checks与上面的整形溢出优化很相似,但是却是针对浮点形(单精度和双精度)变量的优化。
  • Allow Unrounded Floating Point Operations是在变量比较之前让编辑器忽略浮点数象同一精度的转化,这样也可以提高一点儿速度。但是由于两种变量精度的不同,这种优化就会使浮点变量之间的等价比较产生意想不到的结果。
  • Remove Safe Pentium FDIV Checks用来移除编译器为补偿几年前发现的奔腾处理器的浮点bug所额外加的代码。移除安全的奔腾代码通常可以提高浮点类型的运行速度。当然,如果你的程序运行在受此bug影响的机器上的话,那么结果就会出错。我不建议使用这种优化方式,除非你完全确定你的程序不会在有bug的CPU上运行(可能只有出售AMD芯片的商店才会相信这一点)。

常注意一下算法

这里提到的技巧对于编写大多数应用程序都是非常有用的。但是,最好还是要全盘考虑,选取可靠性高的算法和设计方案。俗语说得好:一分准备,十分收获嘛!

责任编辑:超凡

百度大联盟认证黄金会员Copyright© 1997- CNET Networks 版权所有。 ZDNet 是CNET Networks公司注册服务商标。
中华人民共和国电信与信息服务业务经营许可证编号:京ICP证010391号 京ICP备09041801号-159
京公网安备:1101082134