Как производительность .NET / Mono сравнивается с JVM? - PullRequest
2 голосов
/ 23 октября 2009

Мне давно интересно. Пожалуйста, предоставьте количественные данные в поддержку вашего ответа.

Связано: Есть ли существенная разница между производительностью JVM для Windows, Mac и Linux?

Ответы [ 3 ]

12 голосов
/ 23 октября 2009

Shudo провел сравнение и выпустил исходный код для микробенчмарков, таких как linpack, Scimark и т. Д.

Пример результатов для linpack:

alt text
(источник: shudo.net )

Но последнее обновление было более 5 лет назад - очевидно, с использованием .NET V1.0 или v1.1 и в основном с использованием JVM v1.4. Это означает, что это несколько выпусков устаревших на Java и .NET. Вы можете получить источник и генерировать свои собственные результаты.


Я только что сделал это - скачал linpack.java и linpack.cs, скомпилировал и запустил их. Я использовал Java v1.6.0.11 от Sun и C # 3.0 (компилятор 3.5) от Microsoft. Оба на Windows Vista.

Для проблемы размера linpack 2000 я получил 17,6 с для версии Java, 17,78 с для версии C #.

Затем я запустил его снова и получил 18,14 для Java и 17,31 для C #.


Что вы измеряете?

Это иллюстрирует некоторые проблемы при измерении производительности и тестировании.

  • Первый:
    одного исследования недостаточно, чтобы сделать значимые выводы. Обычно вы должны измерить много испытаний, а затем усреднить результаты.

  • Второе:
    только что вы измеряете? Если вы запускаете одно испытание для решения одной проблемы, тогда стоимость запуска процесса включается во время, а также во время JIT и в любые затраты на заполнение любых буферов. Это может или не может быть то, что вы действительно хотите измерить.

    Во многих случаях вы хотите измерить установившуюся характеристику. Например, в процессе сервера вы запускаете его один раз, и он выполняется в течение нескольких месяцев. Поэтому стоимость запуска незначительна, и вы хотите измерить и оптимизировать ее для пропускной способности запроса при минимальном среднем времени ответа. Или в «толстом клиенте» вам нужно время, необходимое для обработки видео, и вы не хотите измерять затраты на запуск процесса.

  • Третье:
    какая нагрузка? Linpack и Scimark могут быть интересны, если вы много математике с плавающей запятой. Но что, если вы этого не сделаете? Что делать, если вы выполняете много операций по уничтожению XML, или анализу строк, или целочисленной математике, или взаимодействию с базой данных, или генерации HTML-страниц. Что если в вашем коде выполняется много потоков или используются примитивы синхронизации потоков? А как насчет связи и IO? Что если ключевой частью транзакции является шифрование или создание и проверка цифровой подписи? Эти тесты не расскажут вам ничего о других сценариях. По этой причине вы можете назвать их микро-эталонами.

    Вам нужен тест, который корректно моделирует то, что вы хотите оценить.


Смотри также:
Тривиальные математические задачи как языковые ориентиры

4 голосов
/ 23 октября 2009

Оформить Перестрелка на языке программирования . Они сравнивают многочисленные языки и виртуальные машины, включая Mono и JVM .

3 голосов
/ 15 июля 2010

, если вы смотрите на скорость запуска, использование памяти и ЦП на настольных ПК, это может помочь, так как оно использует последние выпуски по состоянию на июль 2010 года

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...