Object Pooling

Object Pooling

    COM+的新功能之一就是Object Pooling(对象缓冲),该技术允许对象创建在缓冲池中以便重用对象,它减少了例示对象所花费的总时间。Windows NT4中不包含该技术,可以在通过Component Services将基于VB或VC组件添加COM+应用的时候试验该技术。你会发现基于VB的组件是不能使用该技术的,而任何基于VC的组件可以使用该技术。

    Visual Basic 组件不能被缓冲是因为它们是单元线程的(apartment threaded),而对象缓冲技术要求组件必须能够运行在Neutral-threaded或者是Multithreased-apartment(MTA-多线程单元)。

Visual C++创建的组件可以被标记为Both-threaded,这意味着它们运行在MTA的模式下,因此符合对象缓冲的线程要求。但是,如果组件创建为MTS组件,它们就不能支持对象缓冲。对象缓冲技术需要组件支持聚合,而MTS要求组件不支持聚合。事实上使用ATL创建MTS的时候,在组件的头文件中就放置了防止组件聚合的宏(Marco)。

DECLARE_NOT_AGGREGATABLE(CComponent)
对象缓冲技术的另一个要求是任何由组件分配的资源必须由组件处理(组件不维护客户端状态),这意味着附加的工作以确保组件被Windows 2000定义为可缓冲。你可能要做些工作才能使Visual C++的组件使用对象缓冲技术,而就不用考虑如何让Visual Basic组件使用该技术了,至少目前如此。

对象缓冲池

对象缓冲池是COM+提供的一种自动服务机制。他可以让程序员将某一组件对象的多个实例暂时保存在一个活动的缓冲池中,只要客户端需要使用这一组件,就可以马上从缓冲池中取得组件对象的实例。

程序员可以对某一给定的组件对象缓冲池进行调节和监控,比如指定缓冲池大小或者实例的创建请求响应时间等等。一当应用程序开始运行,COM+就根据程序员指定的标准来管理缓冲池,并处理组件对象的激活和重复使用等等细节问题。

通过对象缓冲池机制来实现组件重用,可以大大改善程序性能,特别是在一个组件重用率很高的程序中更是如此。对象缓冲池让程序员能够:

1.加快每个客户端使用对象的速度,因它将漫长的对象初始化和资源获得时间省略了,从而使客户的实际使用时间大大缩短。

2.让所有客户来共同承担获取高耗费资源的代价。(例如获取数据库连接,Sockets等等)

3.在程序刚启动,客户请求还未来到时,为客户预先分配对象实例。

4.有效地设置缓冲以利于最优地利用现成的硬件资源——缓冲池配置可以随着现成的硬件资源的改变而改变。

5.当程序员刻意追求对客户的响应时间的时候,让对象立即重新激活。

你可能感兴趣的:(object)