对象池

通过 COM+ 对象池服务可以避免从头创建每个对象的系统开销。激活某个对象时,从池中提取该对象。停用对象时,将其放回池中,等待下一个请求。

通过将 ObjectPoolingAttribute 属性应用于从 System.EnterpriseServices.ServicedComponent 类派生的类,可以配置对象池。

应用 ObjectPoolingAttribute 并设置其属性的过程在如何:创建池对象并设置其大小和超时限制中描述。

对象池使您能够控制使用的连接数量,这与连接池不同,在连接池中可以控制达到的最大数量。下面是对象池和连接池之间的重要区别:

  • 创建。使用连接池时,创建在同一线程上进行,因此如果池中没有任何连接,则代表您创建一个连接。采用对象池时,池可以创建新对象。但是,如果已经达到最大数量,那么,会改为向您提供下一个可用的对象。如果创建对象所需的时间较长,那么这样做是很重要的,但不要长期使用这种方法。

  • 最小值和最大值的实施。这不在连接池中实施。对象池的最大值对于缩放应用程序很重要。可能需要仅对几个对象复用成千上万个请求。(TPC/C 基准依赖此功能。)

COM+ 对象池与 .NET Framework 托管 SQL 客户端连接池几乎完全相同。例如,创建在不同的线程上进行,并强制实施最小值和最大值。

Note注意:

应用程序域会影响对象池的行为。在 Windows 2000 中,当应用程序激活设置为“库”并且有多个应用程序域时,将在默认应用程序域中创建所有池对象,并在多个客户端之间共享。在同样的情况下,使用 Windows XP 和 Windows Server 2003 时,每个应用程序域都有一个对象池。无论使用哪一种操作系统,当有多个应用程序域,且应用程序激活设置为服务器时,进程外客户端将使用默认应用程序域中的对象池。

Note注意:

使用服务组件时,通常不必从客户端调用 DisposeObject。但是,如果在使用 COM+ 对象池服务时没有启用实时 (JIT) 激活服务,则必须从客户端调用 DisposeObject。这种情况下,必须在您结束使用对象时通知 COM+,以确认将该对象返回到池中是安全的。通常,如果打算一次只调用一个池对象,则最好为对象池启用 JIT 激活。如果打算获取引用并多次调用它,使用没有启用 JIT 激活的对象池可能会提高性能。

请参见

任务

如何:创建池对象并设置其大小和超时限制

参考

ObjectPoolingAttribute
System.EnterpriseServices Namespace

概念

可用的 COM+ 服务摘要

Footer image

版权所有 (C) 2007 Microsoft Corporation。保留所有权利。