优化之路:别让程序运行时感觉太慢

IT商界

  我们在使用应用程序时 ,会觉得启动快,完成任务快并在完成任务期间不断反馈信息的程序显得非常快。而在另一种情况下,即使程序实际完成任务时间和第一种程序一样,但无任何信息反馈,且在完成任务时似乎“悬挂”起来了,这时我们会觉得它运行得很慢。所以,我们有必要优化感觉速度。许多VB编程技术都可以使应用程序显得速度快:

  1.隐藏窗体而不是卸载窗体

  2.预加载数据

  3.使定时器在后台工作

  4.使用进度条

  5.加快应用程序的启动速度

  隐藏窗体而不卸载,是一项VB 1.0发布以来就采用的一项技巧,并至今有效。虽说这种技术加载窗体会占用一部分内存,但内存足够,且窗体能够快速出现被认为是最重要,那么,这是一项不错的选择。

  在需要从磁盘加载几个文件时,除非文件特别小,否则用户会感觉到延迟。既然这样,还不如一次加载尽可能多的文件。况且,加载额外的文件的时间也许并不会被觉察出来,而且,以后不会再次延迟。

  在某些特殊应用程序中,等待用户响应时可以预先完成一些重要并可预见的工作。这也可以通过使用定时器来实现。在实现过程中,使用静态(或模块级)变量来跟踪运行进程,每当定时器空闲时就进行一部分工作,但要保证定时器的工作量少,这样才不会被用户察觉出应用程序的应答有什么影响。这样,应用程序就可以预读数据或完成其他事情,从而提高应用程序的速度了。

  至于进度条,相信大家已司空见惯,其作用大家也明白,笔者就不做过多的叙述了。

  程序在启动时,其感觉速度也相当重要。笔者估计大家也不会对那种启动起来慢腾腾的程序有好感吧。用户对程序的第一印象,是在点击程序后看到的变化。由于VBA及Active X 控件等需要加载各种?运行时所需的DLL,所以一些延迟就不可避免了,但即使这样,也还是可以尽快给用户以响应:

  1.在Form_Load事件中使用Show

  2.简化启动窗体

  3.不要加载不需要的模块

  4.启动时运行一个小的应用程序,预加载运行时所需的DLL

  首次加载窗体时,显示该窗体前首先执行Form_Load事件中的代码。在Form_Load代码中使用Show可以改变这种模式,并在执行过的事件中用其他代码给用户一些可见的东西。在使用后,用DoEvents可以确保该窗体已经被画出。

  Sub Form_Load( )

  Me。Show '显示启动窗体

  DoEvents '确保启动窗体已经被画出

  Load MainForm '加载主应用程序窗体

  UnLoad Me '卸载启动窗体

  MainForm.Show '显示主窗体

  End Sub

  窗体的加载时间与其复杂程度是成正比的。为了节省加载时间,我们有必要简化一下启动窗体。正如大部分微软Windows的程序启动时都显示一份简洁的版权屏幕一样,你也可以让你的应用程序显示一些简单的信息。启动窗体上的控件越少,包含的代码越少,则加载和出现的速度就越快。即使它立即加载另一个更复杂的窗体,用户也知道程序已启动。

  对于大的应用程序,要在启动时预加载一些最常用的窗体,这样能够及时显示这些窗体。实现这一目的的最好方法是在窗体上显示进度栏,并在加载其他的窗体时予以更新。每次加载窗体后都调用DoEvents,保证窗体重画。一旦所有的窗体加载完毕,启动窗体就显示第一个加载的窗体并自行卸载。每个预加的窗体都会调用Form_Load事件中的代码。所以应注意不要引起其他问题和太长的延迟。

  VB根据要求加载的代码模块,会立即加载所有的模块。这意味着不调用模块中的过程,模块就不会被加载;相反,如果启动窗体调用过多模块中的过程,则应用程序会因加载这些模块而降低速度。所以,应避免从启动窗体中加载其他模块的过程。

  VB应用程序在启动时,大部分时间是在加载各种运行时的DLL文件。而DLL文件一旦已经加载,则无须再花费这些时间。所以当要使用的DLL文件已经被其他应用程序运行过,你的应用程序在启动时就快多了。所以我们可编一个经常使用的简单实用的小程序,例如编一个日历程序,安装在Windows启动组里,这样系统每次启动时它将自动加载,不仅本身有用,同时也保证了各种VB程序运行时所需要的DLL。