优化Microsoft Access提高速度


  摘要

  这篇文章介绍了在设计、编写和实现Microsoft Access 数据库 利用程序时为 保障 占有最高速度而需要 留神的几点 。

  介绍

  作为一名数据库程序员,你的主要 使命是让你的消费者能 快捷地 取舍、治理和 拜访他们所需要的信息 。 其余的工作 几乎都是 至死不变的, 惟独你的数据库 利用程序执行速度越快,你的程序效率越高 。这篇文章的 目标便是突出各种不同的技巧和策略,通过优化程序来 普及速度,让你的Microsoft Access 数据库 利用程序的效率更高,这样也 可以协助你 实现作为一名数据库开发者的主要使命 。

  硬件

  瞄准速度问题的 根本

  为了 普及你的数据库程序的速度,自然而然地你会想到去 留神影响速度最 根本的几个 部分,我们将从 解决这几个 部分着手 。在你 力求 普及你的数据库程序性能的时候,你的程序所运行的硬件平台将是唯一的决定因素 。显而易见,实现优化的第一条 准则应该是较快的硬件=较快的数据库比籆PU和RAM是这个等式的核心所在 。相信你 定然 留神到Microsoft Access 所申明的,要达到一个令人中意的性能,至少需要8MB的RAM和一个80486的CPU 。一般状况下,消费者 留神到这丝毫是理所 该当的,但我却见过许多消费者为他们的Microsoft Access 的执行速度而感到 懊丧,当我问及他们 使用什么机器运行此程序时,他们告诉我是一台80386,而且是在运行一台服务器上的一个MSACCESS.EXE 。所以,在相信你的消费者通过下面的 步骤当然能 普及其程序性能的同时,始终需要强调的 依旧是,在Microsoft Access 执行过程中,硬件才是 要害的问题 。

  有效的磁盘 拜访

假如已经有了一个令人中意的硬件配置,下面让我们 探讨一下如何 威力 普及Microsoft Access 在此平台上的运行速度 。就这个问题,对你的数据库程序而言,影响其性能的第二位因素便是磁盘 拜访了 。在执行过程中,对物理磁盘的 拜访总是一个速度的瓶颈(与 拜访存储在 RAM中的数据相 比较而言),所以,你应该尽量削减对磁盘的 拜访 。然而,由于你的 利用程序总是要和一些磁盘或 其余一些物理 设施打交道,所以,你的 指标应该是 保障所有的磁盘 拜访都尽可能有效 。要实现这丝毫, 步骤是 时常 整顿你的磁盘数据碎片, 整顿你的数据库所在的磁盘驱动器以及所有你执行你的数据库程序时要 波及的磁盘驱动器,而且你还应 揭示你的消费者定期清理磁盘碎片,以此 保障磁盘 拜访向来有效 。这将最大程度地削减在对物理磁盘进行读写而 花费的 工夫, 只管这些读写是不可幸免的,同时优化了整个体系的性能 。

  使RAM最大化/对磁盘 拜访的频率最小化

  下一个主题是使你的数据库程序与物理磁盘驱动器打交道的频率最小 。要做到这丝毫 要害是尽可能多的 开释RAM空间给你的 利用程序 使用 。要实现这丝毫,你需要做到以下几点:

  添加最大缓冲区的尺寸
  首先 波及到你对最大缓冲区尺寸的设置 。最大缓冲区的尺寸指的是Microsoft Access作为内部存储空间而保留的RAM的数目 。存储空间越大,消费者需要的数据能在RAM中找到可能性越大,同时削减了对物理磁盘的 拜访频率 。Microsoft Access 需要的最小缓冲区是512KB,假如你的硬件系统有多于4MB的RAM,那么你就 可 认为Microsoft Access 多 调配一些供其 使用(这样也添加了系统的性能) 。要做到这丝毫, 惟独要在MSACCESS.INI(在你的windows目录下)文件中添加对最大缓冲区的设置, 使用你的文本编辑器,例如记事本,在此文件中找到 [Option] 段,在其中加这样一句话:

  MaxBufferSize = xxxxx

  这其中的xxxxx即是为你的 利用程序对存储空间 调配而作的新设置(例如,设置MaxBufferSize=2048将为Microsoft Access 调配2MB的缓冲区空间) 。那么,你 毕竟应该 调配多少才算 合适呢?除了“尽可能多”, 其余的还真难说 。你需要手动地调节这个设置,同时需要试着让你的硬件都能提供以下条件:1)不能阻碍消费者同时正在运行的程序,2)不会影响其 本身底层操作系统的运行效率(你可能会在程序启动时想通过.INI文件查看一下Microsoft Access 本身的配置, 因此,任何对MSACCESS.INI文件的 批改都将不得不在下一次Microsoft Access启动时 威力 见效,而对现在正在运行的Microsoft Access程序没有任何的影响) 。


  幸免装载Wizards

为了 开释更多的内存以供Microsoft Access 使用,另一个你 可以采取的步骤是:假如你不 使用Wizards,那么就不要装载它 。你 可以 打开MSACCESS.INI文件,找到[libraries] 部分,在“wizards.mdb=ro”这一句之前加一个分号,这样就幸免了自动加载Wizards 。这样做将 可以 开释315B的RAM提供应Microsoft Access以作己用,这样做的 好处不只在于 普及了运行 工夫的性能,同时使每个 利用程序 均匀削减了大概10秒的安装 工夫 。

  解除墙纸/背景位图

  解除 标准windows墙纸背景 可以 开释RAM中任何一处25K到350K的空间 。解除复杂的位图将 开释更多的内存空间 。
缔造 永远 交换文件

   缔造一个 永远 交换文件( 有关于暂时文件而言)将添加你额外的性能 。关于这丝毫,你 可以求助于关于这方面的协助文档,它将 指导你在运行数据库 利用程序的机器上 缔造这一文件 。

      到现在为止,我们已经解决了有关硬件平台、最大的磁盘 拜访效率的问题,而且为你的 利用程序添加了有效的RAM存储空间,接下来让我们转向优化 利用程序 本身 。

      Microsoft Access 本身特色

      压缩、压缩

      要 保障 时常性的压缩你的程序代码 。当你在开发和 使用Microsoft Access数据库时,你要 时常性地添加和删除数据、代码等等 。现在的问题是Microsoft Access并不能有效地 开释已 调配的但被删除的对象空间,这将 象征着 即便你删除了一个对象,而这个对象 依旧在你的数据库中占领空间 。压缩数据库将迫使Microsoft Access真正删除这些对象并回收其占领的空间,从而使得你的数据库尽量小但却更有效 。我曾把逐字逐句 查问的 均匀 工夫削减了30%——50%,而做到这丝毫仅仅是通过去压缩那些由于 时常 使用又不足压缩而变得 适度膨胀的数据库程序, 因此,在运行程序的过程中,不要 忽视压缩过程的主要性 。正如你要定期 革除硬盘数据碎片一样,你和你的消费者也 该当定期压缩数据库来 保障它始终最有效地运行 。

      只用代码

      你可能 盼望通过宏操作来搭建一个 利用程序的模型,一旦你开始优化你的程序的最后性能, 定然要把所有的宏再一次写成代码 。这主要是由于Microsoft Access代码要比宏运行得快的多 。但遗憾的是有三个宏操作你不能将他们改写成代码,这三个宏是Autokeys、Autoexec和Addmenu操作,这三个宏在Microsoft Access中没有相应的等价类, 因此你不得不被迫 使用他们 。不过,你 可以克服Autoexec的 制约, 惟独要定义Autoexec为调用你的Access Basic Autoexec函数 。

      优化数据类型申明

    当你在你的代码中申明数据类型时,你应该试着尽可能准确 。由于若是一个变量的类型(假如没有特殊申明,缺省为可变类型)十分灵便 自由的话,那么这 品种型同时也将是最 浪费内存的一 品种型 。这样一来,假如你晓得check Balance这个变量不需要超过4位小数精度的话,那么就把它定义成确定类型而不是可变类型 。对你的过程函数的定义同样也 可以如此操作( 比方说,把函数PostCredit()申明为整形,而不是Function PostCredit()) 。请 留神这样一个事实,假如你估量一个变量将会被 解决成一个空值,那么你需要去把它定义成一个可变类型而不是一个确定的严格的数据类型,不然你会得到一个 舛误信息 。同样地,要 留神整形除法和浮点除法中间的差异 。

       时常 使用From/Report变量

    在你的程序中,你需要 保障你能提前解决尽可能多的 查问工作 。这 象征着什么呢?举个例子来 注明:假如你想在代码中查阅一个名为[NetPrice]的文本框,你 可以 使用这样一条语句:

    Mytemprariable=Forms![Customer Invoice]![Net price]

    关于这条指令,Microsoft Access首先在Forms对象里搜索名为[Customer Invoice]的表,一旦它找到这张表,Microsoft Access接下来寻觅名为[NetPrice]的操纵,并进行正确的操作 。从这个例子 可以看出,Microsoft Access 通过两次 查问最后确定我们指定的操纵 。假如你想在同一程序(函数或者子函数)中再次 查问[Customer Invoice]表中任一操纵,你 可以删除可能会在下次浮现的多余语句,而只 使用如下语句:

      Dim F as form

      Set F = Forms![Customer Invoice]

      现在,你的Form变量将自动指向Form[Customer Invoice],同意Microsoft Access 幸免每次在你需要搜索[Customer Invoice]表中任一对象时,都要把数据库的Form对象中所有搜索一次 。为了查阅操纵[NetPrice],你 惟独要 方便地 使用下面的语句:

    Mytempvariable=F![NetPrice]

    你也 可以对Report对象作 雷同的操作( 比方,set R=Reports![MyReport]) 。当你在一个函数中仅仅只对一个Form或Report 拜访一次,你可能在速度性能方面得不到什么太大得 好处,然而一旦你开始在同一个Form或Report中进行的 拜访操作超过一次,你将会看到显而易见的 工夫削减 。于是,通过使Microsoft Access幸免作多余的查阅,你将大大地 普及你程序的速度 。

      在 可以 利用的地方 使用windows函数

    无论何时, 惟独 有关,总是 可以用一个windows函数调用来 接替Access Basic代码执行同一个操作 。这样你将 节俭开发 工夫,由于windows函数调用是已经 实现编码并 通过优化,同时也由于它们是用C语言编写的(机器可执行),而Access Basic代码则要被编译成P代码 模式,同时需要在执行时一行一行地解释 。一个最一般的例子是custom.ini设置 。你 可以 使用Access Basic文件函数去得到一个 自由文件指针, 打开文件,读/写文件, 而后关闭它 。然而假如你 彻底 可以 方便地 使用GetPrivateProfileString和WritePrivateProfileString函数来实现,它们既快且已经编码优化 顺手可用,你为何还要自寻 郁闷呢?(参考:“Enhanced Microsoft Access: Using the Win16 API”)

    你的Microsoft Access数据库 利用程序运行速度越快,你就能更好地 实现你的 使命,也便是向你的消费者提供最有效的 取舍、治理、发送他们的数据的 威力 。我 真挚 盼望以上这些小技巧能协助你达到这个 指标 。