Показать сообщение отдельно
Старый 07.04.2007, 11:51   #5  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2476 (88) +++++++++
Регистрация: 20.08.2005
Переброска в массив (экземпляр класса 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);
    }
}
PS Вообще, Axapta не рекордсмен по производительности в плане выполнения тех же математических операций.
Я бы рекомендовал выносить сложные расчетный задачи во внешний код (dll или COM), а в Axapta'у передавать уже результат.
__________________
Axapta v.3.0 sp5 kr2

Последний раз редактировалось AndyD; 09.04.2007 в 10:04. Причина: очепятка