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

对于从 System.EnterpriseServices.ServicedComponent 类派生的类,可以使用 COM+ 对象池来避免从头实例化对象的开销。COM+ 对象池不是从头开始实例化对象,而是在激活时从池中提取对象。有关详细信息,请参阅对象池

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

  1. 定义一个从 System.EnterpriseServices.ServicedComponent 类派生的类,并将 ObjectPoolingAttribute 属性应用于该类。例如,以下代码定义一个名为 TestObjectPooling 的类并为该类设置 MinPoolSizeMaxPoolSizeCreationTimeout 属性。

    <ObjectPooling(MinPoolSize := 2, MaxPoolSize := 5, _
    CreationTimeout := 20000)> _
    Public Class TestObjectPooling 
    Inherits ServicedComponent
    End Class 
    
    [ObjectPooling(Enabled=true, MinPoolSize=2, MaxPoolSize=5, CreationTimeout=20000)]
    public class TestObjectPooling : ServicedComponent
    {
    }
    
  2. 重写 System.EnterpriseServices.ServicedComponent 类的 ActivateDeactivateCanBePooled 方法。

  3. 在客户端应用程序中测试池对象:

    1. 创建池对象类的一个实例并对池对象调用这些方法。例如,以下代码创建 TestObjectPooling 类的一个实例并调用 Perform 方法。

      Public Class App
          Overloads Public Shared Sub Main(args() As String)
             Dim order As New TestObjectPooling()
                  order.Perform()
      
      
      public class App
      {
          public static int Main(string[] args)
          {
             TestObjectPooling order = new TestObjectPooling();
             order.Perform();
      
      
    2. 调用 DisposeObject 方法,将对象返回到池中。

      ServicedComponent.DisposeObject (order)
      
      ServicedComponent.DisposeObject (order);
      

示例

<ObjectPooling(MinPoolSize := 2, MaxPoolSize := 5, _
CreationTimeout := 20000)> _
Public Class TestObjectPooling 
Inherits ServicedComponent
      Public Sub Perform ()
            ' Method contents go here.
      End Sub 
      Protected Overrides Sub Activate()
            ' Called when removed from the pool.
      End Sub 
      Protected Overrides Sub Deactivate()
            ' Called before deactivating or placing back in pool.
      End Sub 
      Protected Overrides Function CanBePooled() As Boolean
            ' Called after Deactivate. Indicate your vote here.
            Return True
      End Function 
End Class 
[ObjectPooling(Enabled=true, MinPoolSize=2, MaxPoolSize=5, CreationTimeout=20000)]
public class TestObjectPooling : ServicedComponent
{
      public void Perform ()
      {
         // Method contents go here.
      }
      protected override void Activate()
      {
         // Called when removed from the pool.
      }
      protected override void Deactivate()
      {
         // Called before deactivating or placing back in pool.
      }
      protected override bool CanBePooled()
      {
         // Called after Deactivate. Indicate your vote here.
         return true;
      }
}
 

请参见

参考

ObjectPoolingAttribute
System.EnterpriseServices Namespace

概念

可用的 COM+ 服务摘要
对象池

Footer image

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