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

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

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

Выполнение фактической работы или получение ресурсов

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

Компонент можно написать таким образом, чтобы в конструкторе объекта выполнялись как можно больше трудозатрат, которые являются однородными для всех клиентов— получение одного или нескольких подключений, выполнение скриптов, получение данных инициализации из файлов или через сеть и т. д. Это влияет на объединение каждого такого ресурса. Вы объединяете сочетание ресурсов и универсального состояния, необходимых для выполнения некоторых действий.

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

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

Совместное использование затрат на нескольких клиентах

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

Предварительное размещение объектов

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

Управление использованием ресурсов с помощью управления пулом

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

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

Чтобы упростить настройку производительности при настройке пула объектов, можно отслеживать статистику объектов для компонентов в приложении. Дополнительные сведения см. в разделе "Мониторинг статистики объектов".

Повышение производительности компонентов JIT-Activated

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

Скорее всего, вы будете использовать компоненты JIT-активации в пуле при транзакциях. Объединение объектов оптимизировано для обработки транзакционных компонентов. Дополнительные сведения см. в разделе "Пул транзакционных объектов".

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

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

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

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

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