Уважаемые читатели, в этой статье я хочу разобраться, что происходит с Enumerable.Chunk на крупных батчах, — и представить свои выводы.
Chunk создаёт под каждый чанк отдельный массив. На мелких чанках это ни на что не влияет. Но массив на 25 000 int занимает 100 024 байта, а объекты от 85 000 байт рантайм размещает в куче больших объектов. Её очищает сборка второго поколения.
Поэтому увеличение батча с 20 000 до 25 000 записей даёт обратный результат: вызовов меньше, а времени тратится в 1,52–2,74 раза больше. Разница в выделенной памяти — 0,66 КБ на миллион элементов. Ни компилятор, ни анализаторы про это не сообщают.
Будет 6 историй: