Самый быстрый способ скинуть данные в файл
От: lfpw_  
Дата: 16.05.07 08:48
Оценка:
Имеется блок данных памяти.
Как быстрее всего сохранить данные на диск.
При этом предполагается что файл создается новый и после записи в него сразу будет закрыт.
Re: Самый быстрый способ скинуть данные в файл
От: Аноним  
Дата: 16.05.07 09:08
Оценка:
_>Имеется блок данных памяти.
_>Как быстрее всего сохранить данные на диск.

NtCreateFile(), NtWriteFile(), NtClose() из ntdll.dll.
А быстрее, чем HDD всё равно не получиться
Re[2]: Самый быстрый способ скинуть данные в файл
От: lfpw_  
Дата: 16.05.07 09:48
Оценка:
Здравствуйте, Аноним, Вы писали:

А>А быстрее, чем HDD всё равно не получиться


А я и имел в виду, при каком использовании API запись на HDD будет производиться наиболее эффективно. а вызов функции из более низкоуровневой прослойки ИМХО не делает сильной разницы для этой, довольно долгой операции — записи на диск.
Re[3]: Самый быстрый способ скинуть данные в файл
От: Аноним  
Дата: 16.05.07 10:10
Оценка:
_>А я и имел в виду, при каком использовании API запись на HDD будет производиться наиболее эффективно

NtCreateFile() с флагом FILE_NO_INTERMEDIATE_BUFFERING. Также флаг FILE_WRITE_THROUGH нужен если хочешь, чтобы данные были зафлашены на диск немедленно. Более быстрый путь — соответствующий запрос к драйверу FS. А самый быстрый путь — это, конечно, так (весьма приблизительно):

1. Залочить диск
2. Получить смещение достаточного свободного участка на диске.
3. Получить смещение пустой ячейки для новой записи в таблице файлов
4. Послать запрос к драйверу FS на запись RAW-данных файла по смещению, найденному в п.1
5. Послать запрос к драйверу FS на запись RAW-данных записи файла по смещению, найденному в п.2
6. Разлочить диск

А вообще зачем тебе такая супер-пупер скорость? Большое кол-во данных хочешь писать?

_>а вызов функции из более низкоуровневой прослойки ИМХО не делает сильной разницы для этой, довольно долгой операции — записи на диск.


Ну всё же какая-то экономия
Re: Самый быстрый способ скинуть данные в файл
От: Аноним  
Дата: 16.05.07 18:48
Оценка:
Здравствуйте, lfpw_, Вы писали:

_>Имеется блок данных памяти.

_>Как быстрее всего сохранить данные на диск.
_>При этом предполагается что файл создается новый и после записи в него сразу будет закрыт.

Memory-mapped files?
Re[3]: Самый быстрый способ скинуть данные в файл
От: gear nuke  
Дата: 16.05.07 22:43
Оценка: +1
Здравствуйте, lfpw_, Вы писали:

_>при каком использовании API запись на HDD будет производиться наиболее эффективно.


Расшифруй "эффективно". Может быть, подойдёт асинхронная запись? (см FILE_FLAG_OVERLAPPED)

_>а вызов функции из более низкоуровневой прослойки ИМХО не делает сильной разницы для этой, довольно долгой операции — записи на диск.


Ну, можно перемудрить и получить заметную разницу — в худьшую сторону.
People who are more than casually interested in computers should have at least some idea of what the underlying hardware is like. Otherwise the programs they write will be pretty weird (c) D.Knuth
Re[4]: Самый быстрый способ скинуть данные в файл
От: lfpw_  
Дата: 17.05.07 04:34
Оценка:
Здравствуйте, gear nuke, Вы писали:

GN>Расшифруй "эффективно". Может быть, подойдёт асинхронная запись? (см FILE_FLAG_OVERLAPPED)


Эффективно, в том смысле, что за наименьшее время. Не знаю что может дать асинхронная запись в моем случае.
Re[4]: Самый быстрый способ скинуть данные в файл
От: lfpw_  
Дата: 17.05.07 04:37
Оценка:
Здравствуйте, Аноним, Вы писали:

А>А вообще зачем тебе такая супер-пупер скорость? Большое кол-во данных хочешь писать?


Супер-пупер скорость, чтобы было круто, а вдруг пригодиться) А вообще это больше из любопытства и сильной надобности нет, но всегда хочется стремиться к лучшему.
Объем данных небольшой — не более 4МБ.
Re[5]: Самый быстрый способ скинуть данные в файл
От: Аноним  
Дата: 17.05.07 04:48
Оценка:
_>Супер-пупер скорость, чтобы было круто

Нечего занятых людей попусту отвлекать.

_>Объем данных небольшой — не более 4МБ.


Тогда не стоит и заморачиваться. Жёсткие диски нынче настолько шустрые, что даже не заметишь как эти 4 метра будут записаны.
Re[2]: Самый быстрый способ скинуть данные в файл
От: TarasCo  
Дата: 17.05.07 06:02
Оценка:
А>Memory-mapped files?

Обсуждается раз в месяц — скорость записи будет одинаковой, что при использовании WriteFile, что при MMF. В первом случае — даже можно побыстрее при отключении буферизации и.т.п.

Хорошо, если буфера предназначенные для записи в файл, будут иметь выравнивание по странице памяти. Этого можно достигнуть при выделении памяти через VirtualAlloc.
Да пребудет с тобою сила
Re[5]: Самый быстрый способ скинуть данные в файл
От: gear nuke  
Дата: 17.05.07 09:18
Оценка:
Здравствуйте, lfpw_, Вы писали:

_>Эффективно, в том смысле, что за наименьшее время.


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

_>Не знаю что может дать асинхронная запись в моем случае.


Не ждать завершения записи.
People who are more than casually interested in computers should have at least some idea of what the underlying hardware is like. Otherwise the programs they write will be pretty weird (c) D.Knuth
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.