i spent entire minute seriously considering whether i should answer, but since i have a weak character (and it's not completely trivial) i will calm down and answer:
1) have you actually tried allocating entire memory stream AT ONCE (before you start any reading) with memstream.Size? if it doesn't improve performance (as i believe it will not) then the whole thing is a moot point because you can't even notice the time spent on allocating memory...
2) as for applying what i said, the point is to cut down number of allocations/writes (57 times in this case). if you were writing stuff into the file, you WOULD feel the difference.
var buffer: array [1..57] of myrec; //allocate room for many records once
var k: integer;
...
while not DATASET.EOF do begin
if k > 57 then begin
write entire buffer into stream (all records);
k := 1;
end;
read buffer[k] from dataset
k := k + 1;
end;