Текущий архив: 2004.09.12;
Скачать: CL | DM;
Вниз
сравнение по скорости Найти похожие ветки
← →
wild_arg © (2004-08-25 09:10) [0]Народ, как вы думаете, что будет быстрее работать?
AssignFile(f, FileName);
Reset (f, 16384);
BlockRead (F, PBuffer^, 1, dummy);
илиAssignFile(f, FileName);
Reset (f, 1);
BlockRead (F, PBuffer^, 16384, dummy);
Иными словами, что быстрее, прочитать один блок размером 16K или 16K блоков по 1 байту?
← →
КаПиБаРа © (2004-08-25 09:13) [1]И к бабке не надо ходить... конечно один блок размером 16K.
← →
han_malign © (2004-08-25 10:03) [2]>Иными словами, что быстрее, прочитать один блок размером 16K или 16K блоков по 1 байту?
- в данном случае, и в том и в другом варианте, читается "один блок размером 16К"... А размер "записи" никаким боком к размеру блока не лежит.function _BlockRead(var f: TFileRec; buffer: Pointer; recCnt: Longint; var recsRead: Longint): Longint;
begin
Result := BlockIO(f, buffer, recCnt, recsRead, fmInput,
{$IFDEF MSWINDOWS} ReadFileX, {$ENDIF}
{$IFDEF LINUX} __read, {$ENDIF}
100);
end;
function BlockIO(var f: TFileRec; buffer: Pointer; recCnt: Cardinal; var recsDone: Longint;
ModeMask: Integer; IOProc: TIOProc; ErrorNo: Integer): Cardinal;
// Note: RecsDone ptr can be nil!
begin
if (f.Mode and ModeMask) = ModeMask then // fmOutput or fmInOut / fmInput or fmInOut
begin
{$IFDEF LINUX}
Result := IOProc(f.Handle, buffer, recCnt * f.RecSize);
if Integer(Result) = -1 then
{$ENDIF}
{$IFDEF MSWINDOWS}
if IOProc(f.Handle, buffer, recCnt * f.RecSize, Result, nil) = 0 then
{$ENDIF}
.............
.............
function ReadFileX(hFile: Integer; Buffer: Pointer; nNumberOfBytesToRead: Cardinal;
var lpNumberOfBytesRead: Cardinal; lpOverlapped: Pointer): Integer; stdcall;
external kernel name "ReadFile";
function __read(Handle: Integer; Buffer: Pointer; Count: Cardinal): Cardinal; cdecl;
external libc name "read";
← →
Wild Sam (2004-08-26 00:52) [3]Классный ответ, han-malign, спасибо!
Страницы: 1 вся ветка
Текущий архив: 2004.09.12;
Скачать: CL | DM;
Память: 0.44 MB
Время: 0.029 c