Какой способ записи на диск самый быстрый?
От: тихий вовочка Россия  
Дата: 14.07.05 17:48
Оценка:
Здрасвуйте, не подскажите, какой способ записи на диск самый быстрый? Писать всегда через CreateFile->WriteFile, а тут как-то возник вопрос быстрого чтения и стал работать с CreateFileMapping. Так понравилось, что решил и на запись попробовать. Получился какой-то ужас (1 Мб порциями по 64 Кб писался 30 секунд). Слышал краем уха, что через MapViewOfFile работа идет с DMA. Значит будет быстрее? Но как это заставить работать7 И можно ли как-то не указывать размер файла (при чтении можно 0 выставить, а что при записи?)
Re: Какой способ записи на диск самый быстрый?
От: adontz Грузия http://adontz.wordpress.com/
Дата: 14.07.05 18:32
Оценка:
Здравствуйте, тихий вовочка, Вы писали:

ТВ>Получился какой-то ужас


Код покажи
A journey of a thousand miles must begin with a single step © Lau Tsu
Re[2]: Какой способ записи на диск самый быстрый?
От: тихий вовочка Россия  
Дата: 15.07.05 03:11
Оценка:
Здравствуйте, adontz, Вы писали:

A>Здравствуйте, тихий вовочка, Вы писали:


ТВ>>Получился какой-то ужас


A>Код покажи

Сейчас под рукой ничего нет, пишу по памяти:
HANDLE hFile = CreateFile("f:\\test.dat", GENERIC_WRITE | GENERIC_READ, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
if(hFile....
throw;
HANDLE hMap = CreateFileMapping(hFile, NULL, PAGE_READWRITE, тут размер в 1 Гб выставлен, NULL);
if(hMap....
throw;
short Data[32768];
for(int i = 0; i < 20; i++)
{
lpData = MapViewOfFile(hMap, FILE_MAP_WRITE, 0, i * 65536, 65536);
if(!lpData)
throw;
memcpy(lpData, Data, 32768 * sizeof(short));
UnmapViewOfFile(lpData);
}
..Закрытие всех и вся
Re[3]: Какой способ записи на диск самый быстрый?
От: Denwer Россия  
Дата: 15.07.05 09:35
Оценка:
Здравствуйте, тихий вовочка, Вы писали:

ТВ>Здравствуйте, adontz, Вы писали:


A>>Здравствуйте, тихий вовочка, Вы писали:


ТВ>>>Получился какой-то ужас


A>>Код покажи

ТВ>Сейчас под рукой ничего нет, пишу по памяти:
ТВ>
ТВ>HANDLE hFile = CreateFile("f:\\test.dat", GENERIC_WRITE | GENERIC_READ, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
ТВ>if(hFile....
ТВ>throw;
ТВ>HANDLE hMap = CreateFileMapping(hFile, NULL, PAGE_READWRITE, тут размер в 1 Гб выставлен, NULL);
ТВ>if(hMap....
ТВ>throw;
ТВ>short Data[32768];
ТВ>for(int i = 0; i < 20; i++)
ТВ>{
ТВ>lpData = MapViewOfFile(hMap, FILE_MAP_WRITE, 0, i * 65536, 65536);
ТВ>if(!lpData)
ТВ>throw;
ТВ>memcpy(lpData, Data, 32768 * sizeof(short));
ТВ>UnmapViewOfFile(lpData);
ТВ>}
ТВ>..Закрытие всех и вся
ТВ>


Все же мапить так часто не надо в цикле, сделай один раз на весь размер и все.
Re[4]: Какой способ записи на диск самый быстрый?
От: тихий вовочка Россия  
Дата: 15.07.05 19:33
Оценка:
D>Все же мапить так часто не надо в цикле, сделай один раз на весь размер и все.
У меня файлы по 15 Гбайт будут, мне же никто не даст столько отображать. Или я не прав?
Re[5]: Какой способ записи на диск самый быстрый?
От: Slava Antonov Россия http://deadbeef.narod.ru
Дата: 16.07.05 04:06
Оценка:
Hello тихий вовочка"", you wrote:

> У меня файлы по 15 Гбайт будут, мне же никто не даст столько отображать. Или я не прав?


На 32-разрядной системе не дадут.

--
Всего хорошего, Слава
Posted via RSDN NNTP Server 1.9
Re[5]: Какой способ записи на диск самый быстрый?
От: Slava Antonov Россия http://deadbeef.narod.ru
Дата: 16.07.05 04:07
Оценка:
Hello тихий вовочка"", you wrote:

> У меня файлы по 15 Гбайт будут, мне же никто не даст столько отображать. Или я не прав?


На 32-разрядной системе не дадут.

--
Всего хорошего, Слава
Posted via RSDN NNTP Server 1.9
Re[5]: Какой способ записи на диск самый быстрый?
От: Denwer Россия  
Дата: 18.07.05 06:21
Оценка:
Здравствуйте, тихий вовочка, Вы писали:

D>>Все же мапить так часто не надо в цикле, сделай один раз на весь размер и все.

ТВ>У меня файлы по 15 Гбайт будут, мне же никто не даст столько отображать. Или я не прав?

И неужто тебе нужно юудет иметь доступ сразу ко всему файлу? Не уверен. Поэтому замапи столько сколько нада и работай, но никак не по 64 КБ. Даже если и это будет некая БД, которой необходим доступ КАК ПРАВИЛО к индексам и самим данным, которые находятся в двух разных местах, то замапь эти два куска тогда. В любом случае заоптимизировать можно почти всегда.
Re: Какой способ записи на диск самый быстрый?
От: TarasCo  
Дата: 18.07.05 07:02
Оценка:
Здравствуйте, тихий вовочка, Вы писали:

ТВ>Здрасвуйте, не подскажите, какой способ записи на диск самый быстрый? Писать всегда через CreateFile->WriteFile, а тут как-то возник вопрос быстрого чтения и стал работать с CreateFileMapping. Так понравилось, что решил и на запись попробовать. Получился какой-то ужас (1 Мб порциями по 64 Кб писался 30 секунд). Слышал краем уха, что через MapViewOfFile работа идет с DMA. Значит будет быстрее? Но как это заставить работать7 И можно ли как-то не указывать размер файла (при чтении можно 0 выставить, а что при записи?)


Обсуждалось уже много раз IMHO. Использование отображенных на память файлов не увеличивает скорость доступа к диску. Ни при записи, ни при чтении. В некоторых случаях есть возможность некоторой оптимизации доступа, но это — не Ваш случай.

По поводу DMA — такими вопросами занимается драйвер диска. А с его точки зрения без разницы отображаете вы файл на память или читаете в буфер. Использовать или не использовать DMA задается настройками драйвера, в принципе можно отключить и работать в режиме PIO
Да пребудет с тобою сила
Re: Какой способ записи на диск самый быстрый?
От: Dmitry Fleytman Украина  
Дата: 18.07.05 08:14
Оценка:
Здравствуйте, тихий вовочка, Вы писали:

ТВ>Здрасвуйте, не подскажите, какой способ записи на диск самый быстрый? Писать всегда через CreateFile->WriteFile, а тут как-то возник вопрос быстрого чтения и стал работать с CreateFileMapping. Так понравилось, что решил и на запись попробовать. Получился какой-то ужас (1 Мб порциями по 64 Кб писался 30 секунд). Слышал краем уха, что через MapViewOfFile работа идет с DMA. Значит будет быстрее? Но как это заставить работать7 И можно ли как-то не указывать размер файла (при чтении можно 0 выставить, а что при записи?)


В документации к CreateFile (MSDN) описан флаг FILE_FLAG_NO_BUFFERING. Там есть ответ на ваш вопрос.
Re: Какой способ записи на диск самый быстрый?
От: Valery A. Boronin Россия linkedin.com/in/boronin
Дата: 27.08.05 16:22
Оценка:
Здравствуйте, тихий вовочка, Вы писали:
ТВ>Здрасвуйте, не подскажите, какой способ записи на диск самый быстрый?
Re[3]: Работа с файлом посредством FILE_FLAG_NO_BUFFERING
Автор: Valerio
Дата: 14.11.03
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Valery A. Boronin, RSDN Team, linkedin.com\in\boronin
R&D Mgmt & Security. AppSec & SDL. Data Protection and Systems Programming. FDE, DLP, Incident Management. Windows Filesystems and Drivers.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.