优化之路:精VB中的分段应用程序

IT商界

  VB提供了一种新方法来设计应用程序的体系结构,以代替单一的整体执行程序。它包含一个核心前端执行程序,并由许多ActiveX部件来支持。这种方法有以下几个显著优点:

  1.部件可在需要时加载,不需要时卸载。

  2.在Win95或WinNT下,即使应用程序的其他部分为16位部件,跨进程的部件也可以是32位的执行程序。

  3.远程部件可使用网络上其他机器的资源。

  另外,部件可被单独调试并可在其他应用程序里重用。在确定如何使用分段技术来优化应用程序之前,必须估计到能创建的部件类型和怎样适合应用程序。使用VB专业版和企业版,能创建以下三类部件:

  1.跨进程部件

  2.进程内部件

  3.远程部件

  三种类型并不互相排斥,可以在一个应用程序里同时使用这三类部件,但从优化应用程序的观点看,它们又各有极不相同的特性。

  一、跨进程部件是一个可执行程序,它可向其他程序提供服务,像其他的可执行程序一样,启动后,在自己的进程空间有自己的堆栈。因此,当客户使用应用程序提供的对象时,操作将从客户的进程空间转到部件的进程空间。

  与其他类型相比,跨进程部件提供了一些很有价值的特点:

  1.异步操作(“线程”)。

  2.部件不能捕获的错误不会导致调用应用程序崩溃。

  3.可在16位和32位应用程序之间相互操作。

  从优化观点看,第一点和第三点最有意义。因为跨进程部件是一个分离的程序,可以与作为客户端的部件异步操作。它有一个单独的“线程”,与客户程序构成多任务(从技术角度上讲,这不是线程,而是一个分离的进程;但从概念上看,二者等价)。两个程序可相互通讯并共享对象。在应用程序执行一些费时的操作时,异步操作就特别有用。客户可先调用部件执行该项操作,而后继续响应用户。

  即使惯用的16位应用程序或部件在32位系统上运行,也可以不必立即将它们改为32位。若使用跨进程部件将应用程序分段时,则可将16位和32位部件混合在一起并互相协调。这有助于充分利用32位部件特性,并保护在16位部件上的投资。

  考虑它们所有的能力,跨进程部件都有一个明显的缺点:性能。以下几点可显现这些不足:

  1.启动速度慢

  2.跨进程调用的开销大

  跨进程部件是一个由VB创建的执行程序,因此,与应用程序的启动相关的问题也同样存在。当从另一个VB程序中调用在VB中写的跨进程部件时,几乎所有的支持DLL已经被加载,这就大大缩短了启动部件的时间。许多部件比VB应用程序的平均规模还小,它们具有很少或根本没有要加载的窗体,这又进一步缩短了加载时间。然而,跨进程部件启动还是要比进程内部件慢。

  二、进程内部件在其进程空间内向其他程序提供服务。与跨进程部件相比,进程内部件有两个优点:

  1.改善加载时间

  2.无跨进程开销

  对进程内部件来说,既无须创建新的进程,也不必加载运行时的DLL文件。因此,进程内部件比跨进程部件加载速度快得多。

  因为它是在进程内的,在引用部件提供对象的方法或属性时,就没有跨进程开销。因此,部件的对象操作起来与客户应用程序自身中的对象一样效率很高。

  当然,进程内部件也是有一些限制的,最重要的是:部件必须是32位,并且不能使用模态窗体。

  三、远程部件

  VB企业版可创建远程部件,该部件能在网络任何地方的机器上单独运行。虽然,网络开销会不可避免地为应用程序性能付出代价,但可以使用别的CPU资源来弥补。当使用远程部件,并且部件操作的数据对包含部件的机器来说是本地数据时,这样做尤为正确。这是因为数据必须从网络其他地方获取,部件可在本地操作数据,之后只通过网络返回结果,这样是比较有效的。

  例如,在局域网中,为了充分利用彼此的资源,可在部件中编写一个对象,用于搜索本地硬盘中满足条件的文件。将该部件做成一个远程部件,并在网络上所有机器中放置一个副本。再编写一个分布式文件查找程序。就可使用所有这些CPU资源并搜索所有网上部件。