Повышение производительности с помощью пула объектов
Пул объектов может быть чрезвычайно эффективным в определенных обстоятельствах, что приводит к значительному увеличению производительности. Общая идея повторного использования объектов, чтобы лучше всего использовать преимущества, заключается в том, чтобы объединить максимальное количество ресурсов, учитывая инициализацию из фактической выполняемой работы, а затем администрирования настраивать характеристики пула на фактическое оборудование во время развертывания. То есть необходимо выполнить следующие действия.
- Напишите объект таким образом, чтобы исключить дорогостоящие инициализации и приобретение ресурсов, выполняемые для любого клиента в качестве предварительных условий для выполнения фактической работы от имени клиента. Напишите тяжелые конструкторы объектов в пул как можно больше ресурсов, чтобы они удерживались объектом и сразу же доступны, когда клиенты получают объект из пула.
- Администратор строительно настройте пул для достижения оптимального баланса в доступных аппаратных ресурсах, обычно торгуя памятью, выделенной для поддержания пула определенного размера в обмен на более быстрый доступ к клиентам и использование объектов. В определенной точке пул достигает уменьшения отдачи, и вы можете получить достаточную производительность при ограничении возможного использования ресурсов определенным компонентом.
Выполнение фактических работ или получение ресурсов
Если у вас есть компонент, который клиенты будут использовать кратко и быстро, где значительную часть времени использования объектов тратится на получение ресурсов или инициализация перед выполнением определенной работы для клиента, вероятность того, что написание компонента для использования пула объектов будет большой победой для вас.
Компонент можно написать таким образом, чтобы в конструкторе объекта выполнялось столько времени, сколько времени занимает много времени для всех клиентов— получение одного или нескольких подключений, выполнение скриптов, получение данных инициализации из файлов или сети и т. д. Это влияет на объединение каждого такого ресурса. Вы объединяете сочетания ресурсов и универсального состояния, необходимых для выполнения некоторых работ.
В этом случае, когда клиенты получают объект из пула, они имеют эти ресурсы сразу же. Как правило, они будут использовать объект для выполнения некоторых небольших единиц работы, отправки или извлечения данных, а затем объект будет вызывать IObjectContext::SetComplete или IObjectContext::SetAbort и возвращать. При использовании таких шаблонов быстрого использования пул обеспечивает отличные преимущества производительности. Вы можете полностью использовать простоту модели программирования автоматических транзакций без отслеживания состояния, но достичь производительности по сравнению с традиционными компонентами с отслеживанием состояния.
Однако если клиенты используют объект в течение длительного времени при каждом вызове, пул будет меньше смысла. Преимущество скорости, которое вы получаете, является маргинальным, так как время использования увеличивается относительно времени инициализации. Вы получаете снижение возвращаемых данных, которые могут не оправдать затраты на память, необходимую для хранения пула активных объектов.
Совместное использование затрат на нескольких клиентах
Вариант инициализации факторинга заключается в том, что для статистической амортизации затрат на получение дорогостоящих ресурсов можно использовать пул. Если вы берете удар приобретения или инициализации один раз, а затем повторно используете объект, вы делитесь этой стоимостью для всех клиентов, использующих объект в течение его существования. Тяжелое время строительства взимается только один раз на объект.
Предварительное размещение объектов
Если указать минимальный размер пула, то при запуске приложения будет создано минимальное количество объектов и пул будет готово для всех клиентов, которые обращаются к приложению.
Управление использованием ресурсов с помощью управления пулами
Максимальный размер пула можно использовать для точного управления использованием ресурсов. Например, если вы лицензировали определенное количество подключения к базе данных, вы можете контролировать количество открытых подключений в любое время.
При рассмотрении шаблонов использования клиента, характеристик использования объектов и физических ресурсов, таких как память и подключения, вы, скорее всего, найдете оптимальную точку баланса при настройке производительности. Объекты пула будут возвращать снижение после определенной точки. Вы можете определить, какой уровень производительности требуется, и сбалансировать их по отношению к ресурсам, необходимым для его достижения.
Чтобы упростить настройку производительности при настройке пула объектов, можно отслеживать статистику объектов для компонентов в приложении. Дополнительные сведения см. в разделе "Статистика объектов мониторинга".
Повышение производительности компонентов JIT-активации
Пул объектов работает очень хорошо со службой JIT-активации COM+. С помощью пула объектов, активируемых JIT, можно ускорить реактивацию объектов. Вы получаете преимущества проведения канала, открытого JIT-активацией, при этом снижая затраты на повторную активацию. В этом случае можно использовать пул для управления объемом памяти, которую вы хотите выделить для объектов с активными ссылками.
Скорее всего, вы будете использовать пул компонентов JIT-активации при транзакциях. Пул объектов оптимизирован для обработки транзакционных компонентов. Дополнительные сведения см. в разделе "Пул транзакционных объектов".
См. также