Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2010.08.27;
Скачать: CL | DM;

Вниз

Самый быстрый способ загнать данные в Memory Mapped File   Найти похожие ветки 

 
Franzy   (2009-03-17 15:05) [0]

Есть массив (динамический) - array of byte, в который записаны все данные, которые нужно перегнать в виртуальный файл, созданный с помощью CreateFileMapping.

Возник вопрос, как это лучше всего организовать в плане производительности:
1) перегонять байты последовательно один за другим (я делаю так: move(x[i],adr^,1); inc(adr); .... в цикле);
2) перегонять по 4 или 8 байт в зависимости от разрядности системы (32/64-бит);
3) перегонять большими кусками, скажем, по 64к;
4) копировать сразу весь массив - пусть система сама решает;
5) Еще как? Может, специальные команды есть? Я только move знаю...

З.Ы. Размер массива данных может быть от 100 байт до пары мегабайт.


 
MBo ©   (2009-03-17 15:23) [1]

4), т.е. move всего массива


 
Тыщ ©   (2009-03-17 15:46) [2]

Для начала стоит перейти на ассемблер и проследить, что данные выравниваниваются.

http://www.wasm.ru/article.php?article=1010028
см. "Перемещение блоков данных".

И есть подозрение, что тормоза совсем не в этом, а хотя бы в том же динамическом массиве.


 
Leonid Troyanovsky ©   (2009-03-17 18:27) [3]


> Franzy   (17.03.09 15:05)  

> Есть массив (динамический) - array of byte, в который записаны
> все данные, которые нужно перегнать в виртуальный файл,
> созданный с помощью CreateFileMapping.

Самый быстрый - разместить массив (ес-но, статический) в этой
проекции файла.

--
Regards, LVT.


 
Franzy   (2009-03-19 12:01) [4]

Динамический массив целиком разместить командой move почему-то не удается. Поэлементно нормально записывает, а если целиком - там в итоге какой-то мусор оказывается. Вероятно, это как-то связано с тем, что дин. массив - он сам по себе указатель...


 
ЮЮ ©   (2009-03-19 12:43) [5]


> Вероятно, это как-то связано с тем, что дин. массив - он
> сам по себе указатель..


поэтому надо указывать адрес первого элемента массива и соответственно полную длину, а не одного элемента в цикле


 
Franzy   (2009-03-19 12:57) [6]

Фантастиш. Действительно, поставил первый (нулевой, в смысле) элемент массива в качестве источника, а количество - полную длину массива. Заработало! Спасибо!

Блин, никогда бы не догадался :)



Страницы: 1 вся ветка

Текущий архив: 2010.08.27;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.206 c
2-1266319857
oleg1963lora
2010-02-16 14:30
2010.08.27
Вопросы по юникоду


2-1271226026
smman
2010-04-14 10:20
2010.08.27
Как двумерному массиву присвоить элементы одномерного?


10-1166777041
DmiSb
2006-12-22 11:44
2010.08.27
Как программно создать письмо на отправку в The Bat


8-1204115414
andrew
2008-02-27 15:30
2010.08.27
ondrawitem


2-1268142361
Irisss
2010-03-09 16:46
2010.08.27
Как сервер fireBird отключить