Некоторая большая пропускная способность памяти не является проблемой и неизбежна при обработке большого количества данных.
Данные, которые вы прочитали, будут выделены как новые объекты в куче, но они являются недолговечными объектами, так как вы просто читаете данные, записываете их, а затем выбрасываете.
Управление памятью в .NET не пытается максимально сократить использование памяти, так как наличие большого количества неиспользуемой памяти не делает компьютер быстрее. Когда вы создаете и выпускаете объекты, они на некоторое время просто остаются в куче, и сборщик мусора в конце концов их очищает.
Для приложения .NET нормально использовать много памяти, когда вы выполняете тяжелую обработку данных, и через некоторое время использование памяти снова снижается. Если есть какая-то другая часть системы, которая нуждается в памяти, сборщик мусора выполнит более агрессивную сборку, чтобы освободить как можно больше.