Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Скорость копирования

311
06 февраля 2010 года
plastictown
309 / / 08.01.2006
Доброго времени суток! Мне необходимо создать свой формат файла, в который должны будут кроме всего прочего помещаться в неизменном виде bmp-файлы довольно большого размера( Мб 20-30, а может и больше). Я столкнулся с такой проблемой, что при использовании ReadFile() и WriteFile() время копирования из одного файла в другой немного больше моих ожиданий( 5 Мб файл 36 секунд). Нельзя ли как-то ускорить процесс? Заранее спасибо!
399
06 февраля 2010 года
KIV
432 / / 20.01.2009
А как вы это делаете? если побайтно, то медлительность неудивительна. А если читаете всё сразу в один буфер, а из него пишите в файл, то (если конечно буфер полностью помещается в памяти) вам поможет только новый, более быстрый жёский диск)) Ну может вам помогут отображаемые файлы... хотя скорость не сильно возрастёт...
311
07 февраля 2010 года
plastictown
309 / / 08.01.2006
Я смотрел на форуме RSDN тот же вопрос. Там советуют использовать буфер размером 32 или 64 Кб и на этом все.
399
07 февраля 2010 года
KIV
432 / / 20.01.2009
Если размер файла намного меньше размера оперативной памяти, то лучше просто создать буфер в памяти размером в весь файл, считать в него и записать в другой файл. Это будет самый быстрый вариант. Ну а ели размер файла измеряется сотнями мегабайт, то лучше копировать небольшими частями как вам и посоветовали. Части можно взять и побольше 64 КБ, главное - кратные размеру кластера. Чем больше размер буфера, тем выше скорость, но если останется слишком мало свободной памяти, то скорость снизится. Надо выбирать оптимальный вариант.
8.2K
07 февраля 2010 года
bagie2
299 / / 26.10.2008
Нифига. Не знаю с чем это связано (наверно завязано упреждающее чтение) но у меня максимальная скорость при размере буфера 32К. Если буфер больше,то производительность не увеличивается или даже чуть-чуть падает. Проверял опытным путем. Причем на других форумах так и советуют 32К делать.
16K
18 февраля 2010 года
asmforce
186 / / 05.01.2010
Цитата: plastictown
Я смотрел на форуме RSDN тот же вопрос. Там советуют использовать буфер размером 32 или 64 Кб и на этом все.



А больше ничего и не надо! Нужно использовать буфер (можно и двумя килобайтами ограничиться)!

Функции ReadFile, WriteFile используют небуферизированный io, - разумеется скорость падает!

311
21 февраля 2010 года
plastictown
309 / / 08.01.2006
Я понял в чем было дело: я использовал буфер так:
 
Код:
char* buffer=new char[32*1024];

А после того как сделал так:
 
Код:
char buffer[32*1024];

скорость возрасла в разы. 20 Мб файл копируется меньше секунды.

Всем спасибо!
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог