|
CoDelphi.com版权所有,未经允许,不得进行任何形式转载
资源管理 实际上,当组件完成一个方法调用时,MTS就毁掉它。听起来有些疯狂。组件每次都要重新创建,包括线程、数据库连接等等资源都是如此。特别是后者更加令人费解,因为数据库连接的创建成本高昂。为了节约成本,MTS缓存了很多资源。当一个新组建要求连接数据库,MTS就提供一个现存的连接。组件完成工作后,MTS把连接取回,而不是关闭它。运行组件的线程也用这样的方式被缓存。 所以,重复创建和毁坏组件的成本就这样减低了。如果客户端连接数量足够多,资源节省完全足以抵消成本。数据库负载也减轻了。 了解MTS创建和释放组件、以及缓存支持资源的方式,是创建高效MTS组件的关键。 注意:数据库连接能否被缓存,取决于数据库引擎是否支持。 COM+ MTS在Microsoft NT4上运行。对于Windows 2000,微软把MTS整合进COM架构,构建了COM+.COM+包括MTS所有特性,还有额外的支持。MTS包在Windows 2000中变成了COM+应用程序。但是,要在MTS在Windows 2000上运行,无需做任何修改。本文将不做区分。 COM+的新特性之一是组件和数据库连接都可以被缓存。这将带来明显的性能提高。 上下文(Context) 理论讲得差不多了。在被请求的时候,MTS组件被动态创建和释放,这称作即时活动。组件需要的资源被缓存,并为所有组件共享。 在开始用Delphi创建MTS组件之前,必须理解一个关于MTS运作的细节。 当客户端创建COM对象,它会收到一个指向被创建对象的接口。对象被释放后,这个接口不再合法,对它的方法调用就会失败。MTS要做点什么来避免发生这种情况。同时,它还要保存一些客户端状态信息,像安全配置和事务信息等等。 于是就引入了context(上下文)对象。我觉得可以不是那么准确地把它看作是MTS组件的替身,使得客户端接口始终保持合法性。如图二所示。
图二MTS Context对象
客户端初次创建MTS组件的时候,同时也创建了context对象。在客户端保留组件接口的时候,这个context组件一直存在。当客户端发出调用方法请求时,context对象就创建组件、运行方法、然后释放组件。Context对象的实际运作相当复杂,不过原理就是如此。 看起来好像为每个客户端保留一个context对象违背了即时活动减低资源消耗的初衷。其实,context对象非常小,给MTS服务器带来的负荷,远比真正的MTS组件来得小。
|