|
07.04.2007, 11:51 | #1 |
Участник
|
Переброска в массив (экземпляр класса Array) мало чем поможет.
Дело в том, что скорость доступа к элементам массива равна скорости доступа к элементам Binary. Т.е. для массива, в итоге, время будет больше - за счет прибавки времени конвертации (у меня получилось дополнительно порядка 400 мс на мегабайт). Но задачу в том виде, что вы привели, можно ускорить процентов на 40 просто за счет обращение не к byte(), а к dWord() Примерно так X++: int sizeDiv4; int sizeMod4; int val; int size; ; ... sizeDiv4 = sizeBuf.dWord(0) div 4; sizeMod4 = sizeBuf.dWord(0) mod 4; size = sizeDiv4 + (sizeMod4 ? 1 : 0); for (i=0;i<size;i++) { if (sizeDiv4 > i) { val = outBuf.dword(i * 4); k += val & 0xff; k += val >> 8 & 0xff; k += val >> 16 & 0xff; k += val >> 24 & 0xff; } else { k += outBuf.byte(i * 4); if (sizeMod4 > 1) k += outBuf.byte(i * 4 + 1); if (sizeMod4 > 2) k += outBuf.byte(i * 4 + 2); } } Я бы рекомендовал выносить сложные расчетный задачи во внешний код (dll или COM), а в Axapta'у передавать уже результат.
__________________
Axapta v.3.0 sp5 kr2 Последний раз редактировалось AndyD; 09.04.2007 в 10:04. Причина: очепятка |
|
Теги |
binary, dll, указатели |
|
Опции темы | Поиск в этой теме |
Опции просмотра | |
|