Принцип работы пула объектов

При настройке компонента для пула COM+ будет поддерживать экземпляры в пуле, готовы к активации для любого клиента, запрашивающего компонент. Все запросы на создание объектов будут обрабатываться с помощью диспетчера пула.

Пулы настраиваются и поддерживаются на основе каждого компонента. Пул состоит из однородных объектов, использующих один и тот же CLSID. Единственным исключением является транзакционные объекты, для которых подпули поддерживаются объекты, содержащие объекты, имеющие сходство транзакций во время ожидания транзакции.

При запуске приложения пул будет заполнен до минимального уровня, указанного администратором, до тех пор, пока будет выполнено успешное создание объекта. По мере того как клиентские запросы к компоненту приходят, они удовлетворены на основе первого предложения из пула. Если нет доступных объектов в пуле и пул еще не находится на указанном максимальном уровне, создается и активируется новый объект для клиента.

Когда пул достигает максимального уровня, запросы клиентов помещаются в очередь и получат первый доступный объект из пула. Число объектов, включая активированные и деактивированные, никогда не превысит максимальное значение пула. Запросы на создание объектов будут истекает после административно заданного периода, чтобы управлять временем ожидания создания объекта клиентами. После сбоя времени ожидания клиент возвращает ошибку E_TIMEOUT из CoCreateInstance.

По возможности COM+ попытается повторно использовать объект после его выпуска клиентом, пока пул не достигнет максимального уровня. Объект отвечает за мониторинг состояния, чтобы определить, можно ли повторно использовать его и должен возвращать соответствующее значение для IObjectControl::CanBePooled.

При создании объекта в пуле он агрегируется в более крупный объект, который будет управлять временем существования объекта. Внешний объект вызывает методы в IObjectControl в соответствующее время в жизненном цикле объекта, как показано ниже.

  • Метод Activate вызывается всякий раз, когда объект возвращается клиенту, активируется в определенном контексте.
  • Метод деактивации вызывается всякий раз, когда объект освобождается клиентом или, в случае объекта, активируемого JIT, при его деактивации.
  • Метод CanBePooled вызывается всякий раз, когда объект должен возвращаться в общий пул. Если объект обнаруживает, что некоторый повторно используемый ресурс находится в плохом состоянии, он должен возвращать FALSE для этого метода, а диспетчер пулов будет не карта объект.

Объект не обязательно должен реализовать IObjectControl. Если это не так, экземпляры всегда будут повторно использоваться, пока не будет достигнут максимальный уровень пула.

Дополнительные сведения о настройке компонентов для пула см. в разделе "Настройка компонента для пула".

Строки конструктора объектов COM+

Управление временем существования объекта и состоянием

Повышение производительности с помощью пула объектов

Пул транзакционных объектов

Требования к объектам с пулом