Visual FoxPro 是速度最快的关系型数据库开发系统,用 Visual FoxPro 创建的应用程序可以满足各种要求,具有广泛的用途。因此,针对不同的情况,您可能需要对操作系统、Visual FoxPro 或应用程序进行优化,以达到最佳性能。
本章介绍了如何针对具体情况优化 Windows 和 Visual FoxPro 的方法。有关优化应用程序的详细内容,请参阅《程序员指南》中的第十五章“优化应用程序”。
本章内容要点:
优化 Visual FoxPro 性能的有效方法是充分利用计算机的硬件和软件环境。这一节将着重讨论如何有效地使用内存以及使您的硬盘获得最佳性能。
优化 Visual FoxPro 系统最有效的方法是提供尽可能多的内存。Visual FoxPro 可以利用大量的计算机内存。如果您的计算机具有扩展内存并进行了正确的配置,那么将极大地增强 Visual FoxPro 的性能。
为了在运行 Visual FoxPro 时,最有效地使用计算机的内存,请遵守下列规则:
为了提高可同时运行的应用程序的数目,Microsoft Windows 支持虚拟内存,方法是以交换文件的方式从内存向硬盘交换代码段(“代码”一词刚刚使用)。通常,Windows 操作系统管理虚拟内存的缺省设置可满足绝大多数用户的需要,推荐使用这些设定值。
注释 交换文件并不提高 Visual FoxPro 的性能,不能代替内存使用。如果需要交换文件,请确认创建的是永久性交换文件,而不是临时性交换文件。
您可以简化显示的窗口和屏幕背景,从而释放更多内存给 Visual FoxPro。
通过管理硬盘驱动器,可以提高启动速度和产品的综合速度。本节介绍组织文件和目录,获得最佳启动速度的方法。
硬盘快满时,输入/输出性能明显下降。如果您的硬盘驱动器只剩下很少的可用空间,可以删除不用的数据或者另买一个更大容量的硬盘来增强 Visual FoxPro 的性能。硬盘中剩余的可用空间越多,硬盘可用空间的连续块就越多。Visual FoxPro 使用这些空间来更改和附加数据库、表、索引、备注和临时文件。因此增加硬盘可用空间可以提高文件中更改或添加命令的执行速度。较多的硬盘空间也可以减少在查询中读取文件的时间。
Windows 和 Visual FoxPro 管理硬盘中文件的方式大大影响应用程序的运行性能。这一节将解释以下问题:
由于众多条目使目录变得繁多,操作系统需要更长的时间才能找到文件。系统需要多长时间找到目录并不属于 Visual FoxPro 的功能。
为了改善这种状况,必须减少在您的子目录下的文件数。要减少目录中的文件数,减少文件寻找次数,请试用以下方法:
这样减少了应用程序子目录中的文件数,从而提高了运行性能。
从子目录中删除文件并不能立刻提高目录的查找速度。当文件被删除后,它在目录中的注册项被保留成“空段”,在目录查找时仍会寻找它们。
Visual FoxPro 在许多操作中产生临时文件。例如,编辑、索引、排序时,都要产生临时文件。文本编辑期间也会产生正在编辑的文件的临时复本。
除非您为临时文件指定其他位置,否则 Visual FoxPro 在 Windows 保存临时文件的目录中创建临时文件。可以在 Config.fpw 文件中包含一个或多个 EDITWORK、SORTWORK、PROGWORK 及 TMPFILES 语句指定不同的目录。
若要指定临时文件的位置
大多数情况下,应为所有的 Visual FoxPro 临时文件指定一个位置。另外,要确定在指定的位置有足够的空间来存放可能的临时文件。
临时文件的目录中应包含尽可能少的文件。较少的文件数可以减少 Visual FoxPro 等待 Windows 返回文件句柄的时间。
如果有大量内存(多于 16MB),那么可以考虑使用内存的一部分作为虚拟驱动器并把临时文件存放在该虚拟驱动器中。然而,通常情况下,可使用的内存越多,Visual FoxPro(以及其他 Windows 应用程序)运行的越快,所以为虚拟盘预留内存可明显地影响运行性能。如果您确实想使用虚拟盘存储临时文件,不要在使用 SORTWORK 语句时,将路径指定为虚拟盘,因为排序时产生的临时文件非常大。
有关临时文件的详细内容,请参阅本章稍后的“在多用户环境中优化 Visual FoxPro”。
一般情况下,Visual FoxPro 的执行速度总是很快的,但您还可以对 Visual FoxPro 的启动和操作速度进行优化。本节介绍如何通过管理启动速度和优化 SET 命令,来增强 Visual FoxPro 的性能。
启动 Visual FoxPro 需要的时间与 Visual FoxPro 的物理大小、PATH 语句的实际长度、启动时遇到的各数据项的数量以及其他因素相关。您可以控制 Visual FoxPro 的加载大小、搜索路径、各组件的位置和启动 SET 命令值。
Visual FoxPro 在下列位置寻找 Foxuser.dbf 和 Config.fpw:
例如,您可以使用下列命令运行 Visual FoxPro 应用程序:
VFP MYAPP.APP
— 或者 —
VFP MYAPP.EXE
如果启动的应用程序或可执行文件包含 Config.fpw 文件,那么它将一直使用并且不能被忽略。
避免加载不想使用的文件也可以加快启动速度。如果应用程序没有使用 FOXUSER 或 FOXHELP 文件,可以使用下列命令在 Config.fpw 文件中废止它们:
RESOURCE = OFF
HELP = OFF
Visual FoxPro 只在 Visual FoxPro 目录中寻找所有其他的 Visual FoxPro 组件(GENXTAB、CONVERT 等等)。如果将组件放置在其他目录中,您必须在 Config.fpw 文件中明确指出那些组件的路径。例如,您可以指定以下路径:
_TRANSPORT = c:\migrate\transport.prg
_GENXTAB = c:\crosstab\genxtab.prg
_CONVERT = c:\fp2vfp\convert.app
您可以使用 MS-DOS 环境变量 FOXPROWCFG 明确指定 Config.fpw 的位置。有关 FOXPROWCFG 变量的详细内容,请参阅第三章“配置 Visual FoxPro”。
若要加快启动速度,并且您不打算使用前面所列的某些 Visual FoxPro 组件,那么可将它们设置成空字符串。
若要优化 Visual FoxPro 的加载大小
cFileVariable = ""
用 _TRANSPORT、_CONVERT 变量或其他适当的变量替换 cFileVariable。
调整某些 SET 命令的值可以优化 Visual FoxPro 的操作。
下表显示了对性能影响最大的 SET 命令,以及可确保最佳性能的相应设置。要指定这些值,可以在 Config.fpw 文件中包含 SET 命令,或在命令窗口中键入 SET 命令,还可以在“选项”对话框中进行设置。
达到最佳性能的命令设置
SET 命令 | 性能设置 |
SET ESCAPE | ON |
SET OPTIMIZE | ON |
SET REFRESH | 0,0 |
SET SYSMENU | DEFAULT |
SET TALK | OFF |
SET VIEW | OFF |
在多用户环境中运行 Visual FoxPro 时,处理临时文件和用户共享文件的方式将影响到 Visual FoxPro 应用程序的操作。
对于大多数多用户环境,应把临时文件放在本地硬盘上。如何管理这些文件取决于磁盘空间的大小,以及运行应用程序的网络计算机中内存的大小。
如果联网的计算机有足够大的硬盘驱动器,并且有大量的剩余空间,那么您可以将 Visual FoxPro 临时工作文件放置在本地驱动器或 RAM 驱动器上,这样可以在多用户环境中提高性能。重定向文件到本地驱动器或 RAM 驱动器中,减少了访问网络驱动器的需求,提高了速度,因而减少了网络传输量。
在小型网络上,如果联网的计算机比较陈旧并且硬盘驱动器速度较低,可以把 Visual FoxPro 的临时文件放在文件服务器上,这将提高性能。若这样做不行,则把临时文件定向到本地硬盘驱动器上。当网络的任务很繁重时,通常将临时文件重定向到本地硬盘驱动器中。
例如,若要将所有临时文件重定向到驱动器 C: 的 WORK 目录中,应在 Config.fpw 文件中包括下列命令:
TMPFILES=c:\work
EDITWORK=c:\work
SORTWORK=c:\work
PROGWORK=c:\work
注意,SORTWORK 目录必须足够大,能容纳排序和索引时 Visual FoxPro 生成的临时文件。当 Visual FoxPro 处理很大的表时,这些临时文件可能非常大。
通过把所有的临时文件放在一个本地驱动器的目录下,您可以在开始每个 Visual FoxPro 工作期之前安全地删除目录中以前创建的临时文件。这些文件往往是由于重新启动或掉电未能被及时删除而遗留下来的,删除这些文件可以清理系统。
在多用户环境中,采用不同的文件和记录加锁方式来访问文件对性能会有不同的影响。使用 USE 和 OPEN 命令的 EXCLUSIVE 子句可以提高性能。
在允许共享,并将 EXCLUSIVE 设置为 OFF 时,共享驱动器上的表可被打开,供多用户访问。如果属于这种情况,那么下面的命令可以以共享方式打开表 CUSTOMER.DBF:
USE c:\customer.dbf
Visual FoxPro 可以缓冲针对非共享文件的写操作,因而可提高性能。若要提高 APPEND、REPLACE 和 DELETE 命令的性能,请使用 USE 或 OPEN 命令的 EXCLUSIVE 子句打开本地表或数据库,如下例所示:
OPEN DATABASE mycompany EXCLUSIVE
USE c:\customer.dbf EXCLUSIVE
应避免重复地打开和关闭表。
有关在共享环境中访问文件的详细内容,请参阅《程序员指南》中的第十七章“共享访问程序设计”。