Что такое ObjectPoolProvider и почему в ядре asp.net IServiceCollection это внедрено по умолчанию

Я заметил, что ServiceCollection при настройке нового основного приложения asp.net имеет Microsoft.Extensions.ObjectPool.ObjectPoolProvider, внедренный платформой по умолчанию. Почему это так, и что более важно, когда мы должны использовать это и как.

Поиск Google по этому вопросу не дает результатов о том, что делает, и в документации, которую я могу найти на docs.microsoft.com, только что описан тип и ничего больше.

0 ответов

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

Похоже, ObjectPool недавно был задокументирован здесь: https://docs.microsoft.com/en-us/aspnet/core/performance/objectpool?view=aspnetcore-3.0

Вот отрывок, описывающий один пример использования: "... платформа ASP.NET Core использует пул объектов в некоторых местах для повторного использования экземпляров StringBuilder. StringBuilder выделяет собственные буферы для хранения символьных данных и управляет ими ".

Что касается вашего вопроса о том, что он по умолчанию зарегистрирован в контейнере ioc, похоже, что теперь он был удален из значений по умолчанию в net core 3.0 - см. Этот PR: https://github.com/aspnet/AspNetCore/pull/6437 и объявление: https://github.com/aspnet/Announcements/issues/336:-)

Если вас интересуют детали реализации, в этом ответе содержится масса информации: Реализация шаблона пула объектов C#

Другие вопросы по тегам