Re[15]: Оптимизация .NET кода
От: alexeiz  
Дата: 30.12.04 11:53
Оценка:
Здравствуйте, 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 все равно инлайнится. Проверено на практике, что вынос его за приделы массива ничего не дает.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.