быстрая работа с файлами делфи

Bicdibus

Участник
Регистрация
5 Мар 2010
Сообщения
497
Реакции
7
сваял дорген, запись в файл происходит посимвольно, генерит очень медленно, 100 страниц около 20 мин. Шаблон считывается в переменную потом оттуда читается по одному символу и записывается в оконечный файл. работа с файлами по класической схэме как в паскале. Нашел еще метод записи через мемо компонент. Какой метод будет работать быстрее, раньше как-то не заморачивался оптимизацией алглритмов програм проц у меня 3 гиг, оператива тоже 3гиг.
 
пиши сразу большими кусками. Побайтово - это издевательство полное...
TFileStream кури.
Офтоп:
блин, вообще, лень несусветная - писать на форуме и ждать ответа на такие простые вопросы вместо просмотра, я уверен, максимум 3-4 первых же линков по выдаче любого поисковика...
 
var
h: Integer;
..
h:= FileOpen('c:\myFIle.txt', fmOpenWrite); // открыли существующий файл
if h <1 then exit; // ошибка открытия
fileSeek(h, 0, 2); установили указатель в конец файла.

цикл

FileWrite(h, буффер, кол. байт); // записали в файл

конец_цикла

fileCLose(h); // закрыли файл
 
delphi tstream - в гугл.
 
Можно запустить несколько потоков. Так будет быстрее.
 
сваял дорген, запись в файл происходит посимвольно, генерит очень медленно, 100 страниц около 20 мин. Шаблон считывается в переменную потом оттуда читается по одному символу и записывается в оконечный файл. работа с файлами по класической схэме как в паскале. Нашел еще метод записи через мемо компонент. Какой метод будет работать быстрее, раньше как-то не заморачивался оптимизацией алглритмов програм проц у меня 3 гиг, оператива тоже 3гиг.

Лучше сделать небольшую обертку, так называемый FileReader, который будет читать из файла большой кусок, а затем из буфера выдавать символ. Если же буфер становится пустым, то происходит автоматическое считывание из файла, пока файл не будет считан до конца
 
сваял дорген, запись в файл происходит посимвольно, генерит очень медленно, 100 страниц около 20 мин. .
быстрее всего через буфер и прямое обращение к памяти blockread(F,Pchar(Ansistring)^, Buff,fileR);
blockwrite(TF,Pchar(Ansistring)^, Buff,fileW); буфер задаешь большой 512 кб статей много только нужно нормально просчитать размер последней записи и уменьшить размер буфера
 
быстрее всего через буфер и прямое обращение к памяти blockread(F,Pchar(Ansistring)^, Buff,fileR);
blockwrite(TF,Pchar(Ansistring)^, Buff,fileW); буфер задаешь большой 512 кб статей много только нужно нормально просчитать размер последней записи и уменьшить размер буфера
не претендуя на последнюю инстанцию, в таком варианте ИМХО возможны всякие казусы в зависимости от того, в какой версии Delphi (например, unicode-aware или нет), всякие приколы с ANSIString/WideString и т.д. Скажу сразу, с дельфей работал давненько.
Еще есть вариант Memory Mapped Files, кажется, они довольно быстрые, пример скинуть не могу (нету), надо погуглить.
 
Если уж совсем хардкора хочется, то используй функции работы с файлами WinAPI. Там и скорость и низкий уровень доступа
 
Делфи приницпиальный выбор? Пиши с помощью нескольких потоков и будет счастье, но в разные файлы тогда уж...
 
Назад
Сверху