Очевидно, что помещение 300 МБ данных в память приводит к тому, что CLR достигает своего максимального объема памяти. Рассматривали ли вы запись файла в какой-либо другой поток, чтобы избежать одновременного хранения всего этого в памяти? Возможно, вы могли бы записать файл непосредственно на диск, а затем обработать его порциями, а не загружать все это в память одновременно.