Найти в Дзене

C# ArrayPool

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

Вот какие выводы были сделаны:

  1. Пулинг объектов (в том числе массивов) помогает снизить аллокации и нагрузку на GC.
  2. Неудачная или неподходящая для конкретного профиля нагрузки реализация пула может испортить производительность.
  3. Для небольших массивов, нужных на короткое время, предпочтительно использовать масштабирующийся ArrayPool<T>.Shared.
  4. Для больших массивов желательно использовать пул, созданный через ArrayPool<T>.Create как более вместительный и не разделённый по потокам.