Здравствуйте, FractalizeR, Вы писали:
Не топ-пость. Неудобно читать и отвечать поже.
FR>Здравствуйте, alexeiz, Вы писали:
A>>"Silver_s" <7870@users.rsdn.ru> wrote in message
A>>news:968016@news.rsdn.ru
>>> ...Отсюда вывод — не подходит .NET для матричных вычислений.
A>>Ёлки палки, что же ты foreach используешь здесь? Для высокопроизводительных циклов только for(). Иначе плата за абстракцию foreach слишком велика. Попробуй вот так:
A>>A>>for ( int i = 0; i < m.Length; ++i ) {
A>> object [] mm = m[ i ];
A>> for ( int j = 0; j < mm.Length; ++j ) {
A>> sum += (int) mm[ j ];
A>> }
A>>}
A>>
FR>Кстати, зачем массив передавать как объект? Я недавно занимаюсь .NET, но оптимизирующий компилятор может представить массив int как базовый тип, а не как класс.
Он и так является внутренним CLR типом. JIT применяет некоторые оптимизации к массивам.
> Кто-нибудь, кстати, сравнивал IL код этих двух кусков?
IL в моем примере будет эффективней. Но IL здесь еще не все определяет. JIT распознает определенные паттерны, такие, например, как при проходе по всему массиву не нужна проверка диапазона в доступе к его элементам.
FR>ForEach тут и правда не подходит. И еще момент. Не лучше ли размеры массивов вычислять отдельно? В цикле for сравнение с величиной можент происходить на кажой итерации (это ведь не Дельфи).
Length все равно инлайнится. Проверено на практике, что вынос его за приделы массива ничего не дает.