分段应用程序

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

另外,部件可被单独调试并可在其它应用程序中重用。也许,这不能提高创建应用程序的速度,但可提高创建下一个应用程序的速度。

在确定如何使用分段技术最优化应用程序之前,必须估计到能创建的部件类型和怎样适合应用程序。使用 Visual Basic 专业版和企业版,能创建以下三类部件:

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

详细信息 在 Visual Basic 专业版和企业版所提供的《部件工具指南》中深入讨论部件的创建。

跨进程部件

跨进程部件是一个可执行程序,它可以向其它程序提供服务。象所有的可执行程序一样,启动后,在自己的进程空间内有自己的堆栈;因此,当作为客户使用由的应用程序使用部件提供的对象时,操作将从客户的进程空间转到部件的进程空间─ 因此而得名。与其它类型相比,跨进程部件提供了一些很有价值的特点:

当然,从优化观点看,第一点和最后一点最有意义。

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

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

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

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

一旦运行起来,跨进程部件就必须承受它的固有缺点:部件间每一次互操作就是一次跨进程的调用。跨越进程边界占用大量的 CPU 周期。因此,从跨进程部件引用对象要比从客户应用程序自身引用或从进程内部件中引用付出更多的代价。减少代码中跨进程的调用,就可以减少跨进程调用开销的影响。

进程内部件

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

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

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

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

远程部件

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

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

详细信息 在 Visual Basic 企业版所提供的《客户/服务器应用程序开发指南》中深入讨论了远程部件。