Поделиться через


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

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

  • Активировать— вызывается всякий раз, когда объект возвращается клиенту, и активируется в заданном контексте.
  • Деактивировать— вызывается всякий раз, когда объект освобождается клиентом или, в случае объекта, активированного JIT, при его деактивации.
  • CanBePooled— вызывается всякий раз, когда объект должен возвращаться в общий пул.

Реализация IObjectControl является необязательным, за исключением транзакционных объектов, которые всегда должны реализовывать CanBePooled для мониторинга состояния ресурсов, которые они хранят. Однако в большинстве случаев рекомендуется реализовать IObjectControl, так как он обеспечивает эффективный способ управления поведением объекта в пуле, как описано ниже.

Выполнение инициализации Context-Specific

С помощью активироватьможно инициализировать объект в контексте, в котором он активируется для данного клиента. Например, чтобы определить, имеет ли объект привязку к транзакции (его ресурсы уже могут быть учтены), можно получить идентификатор транзакции, связанный с контекстом.

Обычно вы бы использовали Activateдля выполнения инициализации, согласованной между любыми методами, предлагаемыми объектом, рассматривая это как контекстно-специфическую часть конструктора объекта.

Очистка любого состояния клиента

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

Управление повторным использованием объекта

Используя CanBePooled, можно отслеживать внутреннее состояние объекта и сообщать о том, подходит ли он для повторного использования. Если CanBePooled возвращает значение True и максимальное значение пула не достигнуто, объект помещается обратно в общий пул. Если CanBePooled возвращает false, объект удаляется. В случае с транзакционными компонентами возвращение значения False приведет к провалу текущей транзакции.

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

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

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

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

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

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

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