Я бы сказал, что сильно снижает производительность упаковка и распаковка типов. Этот процесс хорошо описан в книге Джефри Рихтера. Думаю, прежде, чем писать критические алгоритмы на .NET языках, стоит ее прочесть.
Кстати, зачем массив передавать как объект? Я недавно занимаюсь .NET, но оптимизирующий компилятор может представить массив int как базовый тип, а не как класс. Кто-нибудь, кстати, сравнивал IL код этих двух кусков?
ForEach тут и правда не подходит. И еще момент. Не лучше ли размеры массивов вычислять отдельно? В цикле for сравнение с величиной можент происходить на кажой итерации (это ведь не Дельфи).
Здравствуйте, alexeiz, Вы писали:
A>"Silver_s" <7870@users.rsdn.ru> wrote in message
A>news:968016@news.rsdn.ru
>> Здравствуйте, VladD2, Вы писали:
>>
>>>> Как-как. Написали аналогичный алгоритм на C# (там работа с
>>>> матрицами, заполнение одних ячеек по другим, по тригонометрическим
>>>> функциям) и охерели. Считает правильно, но медленно.
>>
>>> Так показал бы. Глядишь и найдем где у тебя собака порылась.
>>
>> Что-то типа такого:
>>
>> >> void Calc(object[][] m)
>> {
>> int sum=0;
>> foreach(object[] ar in m[1])
>> foreach(int n in ar)
>> sum+=n;
>> //...
>> }
>>
>>
>> ...Отсюда вывод — не подходит .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>
A>А то, что ты jagged массивы используешь, это хорошо. Они побыстрее multi-dimmensional массивов будут.