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

Ваш аккаунт

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

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

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

Быстрая запись массивного файла на ЖД

287
23 июля 2010 года
Shiizoo
958 / / 14.03.2004
Как на си++ максимально эффективно (быстро) записать на логический диск файл, который займет его весь до предела. Меня интересует, чем можно быстро писать. Если fstream, то из каких соображений подбирать буфер и нужно ли его трогать вообще. Или нужно и вовсе унаследоваться откуда-нибудь с учетом специфики задачи. Или еще как? Пишу через fstream с буфером в 100 кластеров ntfs раздела в бинарном режиме и хочется как-то побыстрее.
399
24 июля 2010 года
KIV
432 / / 20.01.2009
Ну вроде как отображаемые файлы самые быстрые. Если я не прав поправьте меня.
7
24 июля 2010 года
@pixo $oft
3.4K / / 20.09.2006
От себя добавлю,что надо ещё асинхронную запись использовать(сам никогда не делал).Почитайте про CreateFile,там всё написано.Кстати да,лучше именно через API это делать
332
26 июля 2010 года
Valiant
416 / / 27.09.2004
Сам никогда не занимался подобным извращением, но может стоит написать два варианта программы: один через СТЛ, второй через выньАПИ. И замерить время выполнения. Хотя почему то мне кажется через АПИ будет быстрее.
399
26 июля 2010 года
KIV
432 / / 20.01.2009
Цитата:
Хотя почему то мне кажется через АПИ будет быстрее.


STL по любому использует WinAPI. Однако специализированный класс может уже по дефолту использовать асинхронную запись или ещё что-нибудь для ускорения записи... Но используя правильные функции WinAPI всегда можно обогнать по скорости STL. Пусть и не всегда намного.

14
26 июля 2010 года
Phodopus
3.3K / / 19.06.2008
в Ц/Ц++ не помню как эта функция/метод называется, но в винапи это SetEndOfFile(). Записью (иногда, нулей) займется сама ОС.
5
27 июля 2010 года
hardcase
4.5K / / 09.08.2005
Если в STL есть возможность передать хэндл на файл - то стоит создать файл известного толстого размера через WinAPI (CreateFile + SetFileValidData + SetEndOfFile) и хэндл передать в fstream (или что-то там еще, чем удобнее пользоваться).
2.1K
27 июля 2010 года
Norgat
452 / / 12.08.2009
Цитата: hardcase
Если в STL есть возможность передать хэндл на файл - то стоит создать файл известного толстого размера через WinAPI (CreateFile + SetFileValidData + SetEndOfFile) и хэндл передать в fstream (или что-то там еще, чем удобнее пользоваться).



в линуксе есть такая возможность(создать поток по открытому файловому дескриптору), значит и в винде должно быть

в линукс для этого юзается __gnu_cxx::stdio_filebuf<char>
в винде не знаю... погуглите...

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