你好,欢迎来到电脑编程技巧与维护杂志社! 杂志社简介广告服务读者反馈编程社区  
合订本订阅
 
 
您的位置:杂志经典 / 编程语言
在VisualFoxPro中提高程序性能的技巧
 

  要:在设计和运行应用程序时,一般都希望应用程序能够发挥最佳性能。本文介绍了在Visual FoxPro中提高程序性能的一些技巧。

关键词:Visual FoxPro  程序  性能  提高

 

    由于Visual FoxPro 6.0具有强大的性能、丰富而完整的工具、极其友好的图形用户界面、良好的兼容性、独一无二的跨平台特性、无以伦比的速度等特性,所以得到较为广泛的应用。在用VisualFoxPro6.0设计和运行应用程序时,一般都希望VisualFoxPro及应用程序能够发挥最佳性能。如何才能提高程序性能呢?解决该问题的方法就是对程序进行各种优化。在用VisualFoxPro进行程序设计时,正确、合理地选择使用数据、函数和命令可以达到提高程序性能的目的,现介绍如下:

1.在程序中合理使用SET 命令。某些关键的SET命令对VisualFoxPro的性能影响很大,合理的使用、设置SET命令,可以优化VisualFoxPro系统。

SET TALK命令决定VisualFoxPro是否显示命令结果。在VisualFoxPro中,对话结果可以直接传送到主窗口、图形状态栏或用户自定义窗口中,对话也可以关掉。当SET TALK设置为ON时,VisualFoxPro主窗口或用户自定义窗口必须经常更新,因此程序的运行速度会降低。当SET TALK设置为OFF时,阻止对话结果传送到主窗口、系统信息窗口、图形状态栏或用户自定义窗口,可以节省更新时间。

SET DOHISTORY命令决定是否在窗口显示执行程序中的命令,当SET DOHISTORY设置为ON时,则在窗口显示执行程序中的命令,这就大大降低了速度,将SET DOHISTORY设置为OFF,则当程序运行时不在窗口显示所执行的命令,这就提高了程序的执行速度,同时可避免当程序运行时每次都更新命令窗口。

2.正确合理地选择数据类型。在VisualFoxPro中数据是必不可少的,数据类型的选择对程序执行的速度有一定的影响。对于数值信息,可以选择数值型、浮点型、双精度型和整型,一般情况下尽可能选用整型数据类型,因为VisualFoxPro可以最有效地处理整型数据。在建立索引文件时,如果有可能的话,尽量使用整型数据类型字段作为主关键字和外部关键字,这样会得到较小的数据文件,更小的索引,以及更快的连接。

3. 避免重复打开文件。重复打开文件会降低性能,较好的作法是将要用到的文件在不同的工作区打开,在需要时使用SELECT命令选择特定的工作区。

    4. 尽量使用过程文件。一个较复杂的应用系统,通常都有许多的子程序,由于VisualFoxPro中程序是以文件形式存储在磁盘上的,因此,每当调用一个外部程序,都要去访问磁盘,而频繁的磁盘存取正是影响程序执行速度的主要因素。要提高程序的执行速度,就应减少磁盘存取次数。VisualFoxPro提供的过程文件在程序运行期间驻留内存,调用过程文件中的过程时只需发出一个DO命令,不需要重新打开这个文件,从而减少了磁盘访问次数,同时也可以减少工作目录中需要的文件数,这样所有文件的操作(如打开、重命名或删除文件)速度均会得到提高。

5. 当某一函数或运算需要重复多次时,把这个函数和运算结果保存在一个内存变量中,以后就可以用这个内存变量来代替这个函数或运算,这样可以节省一些时间。

6. 合理使用循环语句。在VisualFoxPro中有三种循环语句:

循环:DO WHILE …… ENDDO

自动计数循环:FOR …… ENDFOR

扫描数据库循环:SCAN …… ENDSCAN

一般情况下,当循环次数已知时,循环即可以使用FOR ENDFOR,也可以使用DO WHILE ENDDO,应尽量使用FORENDFOR循环。例如:从1加到100

FOR ENDFOR循环程序如下:

S=0

FOR N=1 TO 100

S=S+N

ENDFOR

DO WHILE ENDDO循环程序如下:

S=0

N=1

DO WHILE N<=100

S=S+N

N=N+1

ENDDO

从上例可以看出,用FOR ENDFOR循环,循环变量的初值可不用先设定,累计也不需另设N=N+1,因此,在计数循环时FOR ENDFORDO WHILE ENDDO更快,且程序更简洁。

若对数据表中全部记录或符合条件的记录执行某一操作时,使用SCANENDSCAN循环较好。例如:逐条显示数据表中的记录。

SCANENDSCAN循环:

USE <数据表名>

SCAN

DISPLAY

ENDSCAN

DO WHILE ENDDO循环:

USE <数据表名>

DO WHILE NOT EOF()

DISPLAY

SKIP

ENDDO

可见SCANENDSCAN不需要SKIP命令逐一控制记录指针,也不需用NOT EOF()判断文件是否终结。因此,在数据表循环读取时,SCANENDSCANDO WHILE ENDDO速度快。

7.要注意循环内各种操作的效率问题。如:循环内不变的运算尽量提到循环外,削弱循环内运算强度等,可提高运行效率,特别是循环次数很大时。

8. 用名称表达式代替宏替换。VisualFoxPro中的宏替换函数用途很广,灵活、巧妙地使用能增加程序的灵活性、通用性、减少程序量。在有些情况下,用名称表达式来取代宏替换,程序性能将有很大改进。

在程序设计中,考虑到程序的通用性,一般习惯用下列语句打开一个数据表

ACCEPT ‘输入数据表名称’ TO MC

USE &MC

若将USE  &MC改为USEMC),即宏替换改为名称表达式,则更快。

9. 尽量将输出发送到顶层窗口,将输出发送到任何非顶层窗口都比输出到顶层窗口慢。使输出在窗口后面滚动是最糟糕的情况,应尽量避免。

10.使用数组,可以使数据的处理及其管理变得简便有效。引用数组,只要改变其下标变量即可,从而易于用循环结构进行处理,大大减少程序量,使程序性能得以改善。从多个字段复制数据时,SCATTER TO ARRAY命令要比SCATTER MEMVAR命令快。

11. 高效地引用多个属性。如果更新对象的多个属性,VisualFoxPro必须多次寻找这个对象,这会影响程序的性能。为了避免这种重复查找,可使用WITH ENDWITH命令。这种方法使VisualFoxPro只查找一次对象。

12VisualFoxPro采用动态内存管理,在运行时能动态地调整内存分配,使内存能得到有效地利用。当VisualFoxPro运行在内存较大的环境下时,应用程序将能分配到较多的空间,可提高程序的运行速度。若要最有效地使用内存,尽量在需要对象时创建,当不再使用对象时要及时清除,以便释放内存。若要检查每个对象占用了多少内存,可调用SYS1016)函数。

 

  推荐精品文章

·2024年9月目录 
·2024年8月目录 
·2024年7月目录 
·2024年6月目录 
·2024年5月目录 
·2024年4月目录 
·2024年3月目录 
·2024年2月目录 
·2024年1月目录
·2023年12月目录
·2023年11月目录
·2023年10月目录
·2023年9月目录 
·2023年8月目录 

  联系方式
TEL:010-82561037
Fax: 010-82561614
QQ: 100164630
Mail:gaojian@comprg.com.cn

  友情链接
 
Copyright 2001-2010, www.comprg.com.cn, All Rights Reserved
京ICP备14022230号-1,电话/传真:010-82561037 82561614 ,Mail:gaojian@comprg.com.cn
地址:北京市海淀区远大路20号宝蓝大厦E座704,邮编:100089