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

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

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

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

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

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

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

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

Обмен затратами между несколькими клиентами

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

Предварительное выделение объектов

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

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

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

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

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

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

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

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

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

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

Как работает пул объектов

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

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