静态变量慢于动态变量
在过程中引用静态局部变量要比引用常规局部动态变量慢2-3倍。要想真正地加速过程的执行速度,最彻底的方法就是将所有的静态变量转换为模块级别变量。
这种方法的唯一不足是:过程很少是自包含的,如果要在其他工程中重用,就必须同时拷贝并粘贴这些模块级别变量。
另外的一种处理方法是:在时间要求高的循环前,将静态变量数值装入动态变量中。
善用"assume no aliasing"编译选项
据说,如果过程能够2次或多次引用同样的内存地址,那么过程就会包含别名数值。一个典型的例子如下:
dim g_globalvariable as long
...
sub procwithaliases(x as long)
x = x + 1
g_globalvariable = g_globalvariable + 1
end sub
如果传递给这个过程g_globalvariable变量,则将通过一个直接引用以及x参数两种方式修改变量的数值2次。
别名数值经常是不良编程习惯的产物,对于程序优化有害无益。事实上,如果能够完全确认应用程序从来没有使用到别名变量,就可以打开"assume no aliasing"高级编译选项,这将告知编译器没有过程可以修改同一内存地址,使编译器产生更加有效率的汇编代码。更特别的是,编译程序将试图缓冲这些数据到cpu的寄存器中,从而明显地加速了程序运行。
总结一下,当遇到以下情况时,就不会有别名数值:(1) 过程不引用任何全局变量 (2) 过程引用了全局变量,但从来不通过byref参数类型传递同一变量给过程 (3) 过程含有多个byref参数类型,但从来不传递同一变量到其中的2个或者多个之中。
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 安全 模式 框架 测试 开源 游戏
Windows XP Windows 2000 Windows 2003 Windows Me Windows 9.x Linux UNIX 注册表 操作系统 服务器 应用服务器