На Free Pascal буферизованное чтение и запись делаются просто:
## Код:
```
Repeat
    BlockRead (Fin, buf, Sizeof(buf), NumRead);
    If NumRead > 0 Then
        ProcessBlock(buf, NumRead);
    BlockWrite (Fout, Buf, NumRead, NumWritten);
  Until (NumRead = 0) or (NumWritten <> NumRead);
```

С размером буфера 64K (другие не пробовал) получилось в среднем 4800 мс. Как это реализовано в FPC через WinAPI я не знаю.

(модератор) перенесено изviewtopic.php?p=77180#p77180согласно пп. 3.3/2.1