Во-первых, проблема с памятью - найти профилировщик (я использовал тот, что использовался в JetBrains, но почти любой подойдет). Это, по крайней мере, скажет вам, что именно потребляет память
это может не решить вашу конкретную проблему Я не использовал подход для 150 МБ данных
но мой собственный первый подход, как правило, заключается в том, чтобы обернуть файл в IEnumerable, читая по одной записи за раз и делая это лениво.
если есть проблемы с памятью / производительностью (которые, я думаю, будут в вашем случае), я буду загружать части файла (используя перечисляемый) и сохраняю эту часть в памяти только до тех пор, пока она отображается. (однако это создает новую проблему, если вам нужно перейти назад)