Shudo провел сравнение и выпустил исходный код для микробенчмарков, таких как linpack, Scimark и т. Д.
Пример результатов для linpack:
(источник: 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? Что если ключевой частью транзакции является шифрование или создание и проверка цифровой подписи? Эти тесты не расскажут вам ничего о других сценариях. По этой причине вы можете назвать их микро-эталонами.
Вам нужен тест, который корректно моделирует то, что вы хотите оценить.
Смотри также:
Тривиальные математические задачи как языковые ориентиры