Prueba leer por bloques:
Código Delphi
[-]procedure TForm1.Leer(Fn: TFileName);
Const
eol = #10;
var
F: file;
NumRead,i, BufPos:LongWord;
Buf,lin: array[1..1024] of Char;
s : String;
begin
memo1.Lines.Clear;
AssignFile(F, FN);
Reset(F, 1);
BufPos := 0;
repeat
BlockRead(F, Buf, SizeOf(Buf), NumRead);
FillChar(Lin,SizeOf(lin),#0);
i := 0;
While Buf[i] <> eol do
Begin
lin[i] := Buf[i];
Inc(i);
End;
s := String(Lin);
Inc(BufPos,i);
memo1.Lines.Add(s);
Seek(f,BufPos);
until (NumRead = 0);
end;
Aunque no tengo archivos grandes para probar...