![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Самый быстрый способ загнать данные в Memory Mapped File
Franzy © (2009-03-17 15:05:00)Есть массив (динамический) - array of byte, в который записаны все данные, которые нужно перегнать в виртуальный файл, созданный с помощью CreateFileMapping.
Возник вопрос, как это лучше всего организовать в плане производительности:
1) перегонять байты последовательно один за другим (я делаю так: move(x[i],adr^,1); inc(adr); .... в цикле);
2) перегонять по 4 или 8 байт в зависимости от разрядности системы (32/64-бит);
3) перегонять большими кусками, скажем, по 64к;
4) копировать сразу весь массив - пусть система сама решает;
5) Еще как? Может, специальные команды есть? Я только move знаю...
З.Ы. Размер массива данных может быть от 100 байт до пары мегабайт.
Franzy (2009-03-19 12:57:00) [1]Фантастиш. Действительно, поставил первый (нулевой, в смысле) элемент массива в качестве источника, а количество - полную длину массива. Заработало! Спасибо!
Блин, никогда бы не догадался :)
ЮЮ (2009-03-19 12:43:00) [2]
> Вероятно, это как-то связано с тем, что дин. массив - он
> сам по себе указатель..
поэтому надо указывать адрес первого элемента массива и соответственно полную длину, а не одного элемента в цикле
Franzy (2009-03-19 12:01:00) [3]Динамический массив целиком разместить командой move почему-то не удается. Поэлементно нормально записывает, а если целиком - там в итоге какой-то мусор оказывается. Вероятно, это как-то связано с тем, что дин. массив - он сам по себе указатель...
Leonid Troyanovsky (2009-03-17 18:27:00) [4]
> Franzy (17.03.09 15:05)
> Есть массив (динамический) - array of byte, в который записаны
> все данные, которые нужно перегнать в виртуальный файл,
> созданный с помощью CreateFileMapping.
Самый быстрый - разместить массив (ес-но, статический) в этой
проекции файла.
--
Regards, LVT.
Тыщ (2009-03-17 15:46:00) [5]Для начала стоит перейти на ассемблер и проследить, что данные выравниваниваются.
http://www.wasm.ru/article.php?article=1010028
см. "Перемещение блоков данных".
И есть подозрение, что тормоза совсем не в этом, а хотя бы в том же динамическом массиве.
MBo (2009-03-17 15:23:00) [6]4), т.е. move всего массива