string line = File.ReadLines("file.txt").First();
И вы читаете все 600Мб в память.
Ну и в многопотоке это будет работать только с блокировкой файла на время перезаписи. При таком размере это выльется в существенный лаг. На вашем месте я бы пересмотрел концепцию.
А так: ищите первый символ конца строки, запоминаете позицию. Зачет читаете кусок после неё и записываете в начало файла, читаете дальше и дописываете после первого блока и так до конца. В конце уже обрезаете размер файла под новый размер.