Weiters würde ich dir wärmstens davon abraten, jedesmal in der Funktion Speicher für das dynamische Array zu allozieren (SetLength(); was eig. eh dann, sobald es außer Scope fällt (Funktionsende), dealloziert wird).
Lös das bitte anders!
Edit: Ich seh grad, dass du auch ein Kopiervorgang drinnen hast (Result := String(Buffer))
Ist
imho auch unnötig und sehr ineffizient.