Низкая производительность библиотеки System.Math в .NET4 / VS2010 - PullRequest
0 голосов
/ 18 июня 2010

Мое приложение, скомпилированное в .NET 4, работает очень медленно по сравнению с .NET 3.5.Когда я провел анализ производительности, я обнаружил, что библиотеки System.Math в VS2010 / .NET 4 значительно замедлились.

Есть объяснения этому?Кто-нибудь еще сталкивался с этим или я только один это вижу?

ОБНОВЛЕНИЕ:

Мой пример кода выглядит так:

for (int i = 0; i < 10; i++)
    {
        for (int j = 0; j < 1000000; j++)
        {
            Min((double) ((j + 1) / 2), (double) ((j + 2) / 2));
        }
        for (int k = 0; k < 1000000; k++)
        {
            Min((double) ((k + 2) / 2), (double) ((k + 3) / 2));
        }
        for (int m = 0; m < 1000000; m++)
        {
            Min((double) ((m + 3) / 2), (double) ((m + 4) / 2));
        }
        for (int n = 0; n < 1000000; n++)
        {
            Min((double) ((n + 4) / 2), (double) ((n + 5) / 2));
        }
    }

Приведенный выше код занимает 0,55секунд в рамках 3.5.То же самое занимает 0,8 секунды в .NET 4. Подобные проблемы с производительностью, которые я видел в других функциях, таких как Truncate, Floor и Max и др.

Спасибо, Niranjan

1 Ответ

0 голосов
/ 15 июля 2011

Я написал небольшую тестовую программу, принимающую ваш код (с небольшими изменениями, чтобы сложить результаты Min), чтобы JIT не оптимизировал образ памяти кода.Также я скомпилировал, используя / o + flag для csc.Я использовал все три версии csc, которые у меня были на моей машине (2.0 / 3.5 / 4.0).

Результаты: никаких существенных отличий.Все заняло от 165 до 175 миллисекунд за несколько прогонов для каждой сборки.Эти колебания могут быть вызваны любым другим фоновым шумом в вашей системе, поэтому я не буду полагаться на такие микропроцессоры.

В вашей системе я почти уверен, что вы увидите флуктуации времен даже при работе с той жесборка для микро-тестов, как это.

Виджай

...