ya_Mickey
Junior Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору ppkp Чего-то я еще разок проверил твой код после замечания BlackVetal. Кое-что навевает на размышления. Во-первых, как было отмечено, не факт, что просадка происходит на математике, возможно что функции поиска непонятно как реализованы. Во-вторых, вот ты говорил, что боксингом не пользуешься, а в то же время есть конструкции типа aaa[idx].X, которые как раз и производят unboxing для вещественных значений. В общем, для детального анализа недостаточно информации - нет объявления классов (или структур), нет функций поиска. В-третьих, оператор switch внутри цикла лучше заменить на вызов делегата - не надо будет КАЖДЫЙ РАЗ в теле цикла проверять условие, которое выглядит установленным вне цикла. Правда при этом прямой вызов будет заменен на косвенный, но я думаю, что-то в этом можно выиграть. По поводу производительности. Я склонен считать, что оптимизатор дельфи может выиграть только в том, что он может лучше оптимизировать конструкции языка высокого уровня по сравнению с оптимизатором MSIL, который, фактически, оптимизирует только ассемблерные операторы и их последовательности. Однако, MSIL генерирует код _родной_ для заданного процессора, это раз, в то время как дельфи генерирует код для "обобщенного" процессора. Второе, C# позволяет легко распараллеливать код по ядрам процессора средствами .NET, чего не позволяет делать Delphi (насколько я знаю), а приведенный код выглядит распараллеливаемым. Тут можно еще кое-чего порыть. В общем, разные это средства. И требуют они разных подходов. |