Моно Проект: Почему моно быстрее, чем.NET?

Я удивлен заметить, что моно быстрее, чем.NET. Кто-либо знает, почему это так? Я ожидал моно быть медленнее, чем.NET, но не имел место по крайней мере с моими экспериментами.

У меня есть ноутбук Windows XP с платформой.NET. Я выполняю CentOS на VMware vmplayer сверху Windows XP. Я хотел попробовать моно. Так захватил Моно 2.6.1 источников и установил его на CentOS в vmplayer. Я записал тестовое использование приложения веб-сервиса.Net 2.0 выполнил его на wndows, оно работало, я передал двоичный файл песням в vmplayer без любой перекомпиляции и выполнил его на песнях. Ура это работало! Жизнь хороша, но тогда что-то еще соблазнило мое внимание. Выполнение приложения на песнях, казалось, было быстрее. Я не верил глазам.

Для подтверждения моего наблюдения я устранил сеть из уравнения, потому что сеть reponse зависит от партии внешних факторов.

Я захватил маленький фиктивный код цикла из Интернета, скомпилировал его в Visual Studio, выполняемой в окнах, а также CentOS, результаты следующие

Output on windows console is HelloConsole\bin\Debug>HelloConsole.exe
Result =2.66666664666712E+24
37443.6077769661 ms


Output on Centos console is [rupert@bagvapp Math.Pow]$ mono HelloConsole.exe
Result =2.66666664666712E+24
28790.6286 ms

Если бы кто-либо может объяснить это поведение, которое было бы большим. понимание моего неспециалиста является реализацией Mono, более эффективно, чем платформа.NET. Даже если я предполагаю, что Математическое внедрение Mono только эффективно. Но партия реализаций как обработка финансовых данных, графические вычисления зависят партия от библиотеки Math. Было бы более интересно выполнить тест на Mono/Centos непосредственно без VMware, но этому требуется некоторое время. Я дам его, попытка может быть в следующие выходные.

public static void DummyLoop()
    {
        double sumOfPowers = 0;
        int count = Convert.ToInt32(ConfigurationManager.AppSettings["count"]);

            for (int i = 0; i < count; i++)
            {
                sumOfPowers += Math.Pow(i, 2);   
            }


        Console.WriteLine("Result =" + sumOfPowers);   
    }


    static void Main(string[] args)
    {
        Stopwatch stopWatch = new Stopwatch();
        stopWatch.Start();
        DummyLoop();
        stopWatch.Stop();
        double ms = (stopWatch.ElapsedTicks * 1000.0) / Stopwatch.Frequency;
        Console.WriteLine(string.Concat(ms.ToString(), " ms"));
        Console.ReadLine();
    }
39
задан funwithcoding 7 March 2010 в 21:10
поделиться

3 ответа

Это было обсуждение этого в списке рассылки Mono не так давно. Причина, по которой они представили, заключается в том, что Mono чрезвычайно оптимизирован под Linux (как именно, похоже, не упоминалось). Но Mono здесь не единственная переменная, если вы используете Mono в Linux. Это другая ОС, разные планировщики процессов и разные подсистемы уровня ядра могут заметно по-разному влиять на производительность, независимо от работы команды Mono. Mono также активно использует встроенные функции компилятора , которые .NET может делать или не делать.

Однако в большинстве случаев при сравнении Mono в Windows и .NET в Windows вы можете обнаружить, что .NET чаще превосходит Mono, чем нет. Но даже тогда Моно не всегда может проиграть. Фактически, для кода, специально оптимизированного для Mono (например, с использованием Mono.SIMD), вы можете получить на порядок большую производительность на Mono по сравнению с .NET, независимо от платформы.

59
ответ дан 27 November 2019 в 02:50
поделиться

На самом деле вы не проводите сравнение. В основном вы сравниваете одну функцию (Math.Pow) между двумя. Предположительно, реальное приложение будет делать больше вещей, чем эта одна функция.

Math.Pow в Mono выглядит оптимизированной за счет реализации этой функции в C. Я не знаю, как это реализовано в .Net. Возможно, она полностью реализована в управляемом коде.

Скорее всего, вы обнаружите, что оба режима выполнения достаточно быстры для повседневных нужд.

8
ответ дан 27 November 2019 в 02:50
поделиться

Ну, я не удивлен, что он выполняет тот же байт-код быстрее.

Если вы попробуете версию Mono для Windows, я ожидаю меньшую разницу в производительности, за исключением случаев, связанных с операциями, оптимизированными для SIMD.

-21
ответ дан 27 November 2019 в 02:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: