Переброска в массив (экземпляр класса 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'у передавать уже результат.