Java против C#: есть ли какие-либо исследования, сравнивающие скорость их выполнения?

Убрав все очевидные предостережения, связанные с эталонными тестами и сравнением эталонных тестов, есть ли какое-либо исследование (набор хорошо документированных и непредвзятых тестов), в котором сравнивается средняя скорость выполнения двух упомянутых языков? Спасибо


person pistacchio    schedule 26.06.2009    source источник
comment
Вы можете найти это: shootout.alioth.debian.org . Но обратите внимание, что они тестируют C# с Mono, а не с Microsoft.NET.   -  person Rasmus Faber    schedule 26.06.2009
comment
Эти тесты, как правило, предполагают, что вы хорошо понимаете проблему с неограниченным временем высококвалифицированных разработчиков. Для реалистичных проектов с меняющимися требованиями и небольшим числом разработчиков со смешанными способностями картина намного сложнее, и чистая скорость микротестов становится менее важной.   -  person Peter Lawrey    schedule 18.04.2010
comment
Если вам нужна только производительность при запуске, это хороший ориентир: codeproject.com/KB /dotnet/RuntimePerformance.aspx   -  person dmihailescu    schedule 23.08.2010


Ответы (5)


Лучшее сравнение, которое я знаю, — это Игра по оценке компьютерных языков.

Он сравнивает скорость, использование памяти и размер исходного кода для (в настоящее время) 10 тестов на большом количестве языков программирования. Реализации эталонных тестов предоставляются пользователями, и они постоянно улучшаются, поэтому положение несколько меняется.

В настоящее время проводится сравнение openjdk и C# .NET Core.

В настоящее время это близко, но .NET Core немного быстрее на большинстве ориентиры.

person Rasmus Faber    schedule 29.06.2009
comment
Я не думаю, что сравнение Java с Mono имеет смысл, среда выполнения MS .net, вероятно, намного быстрее, чем Mono. - person Erich Kitzmueller; 29.06.2009
comment
@ammoQ: Это было бы и моим предположением. Но я просмотрел его, и следующая статья, кажется, указывает на то, что производительность сопоставима: CISCBrain/статьи/ . - person Rasmus Faber; 29.06.2009
comment
@ammoQ, есть ли какие-то особые причины полагать, что .NET по умолчанию работает быстрее, чем Mono? - person Thorbjørn Ravn Andersen; 17.04.2010
comment
@ Thorbjørn: Нет, просто внутреннее ощущение и кое-какой опыт, настолько устаревший, что я не буду рассказывать. Некоторые обсуждения по этому поводу (включая вклад Джона Скита): eggheadcafe.com/software/aspnet/32289725/ - person Erich Kitzmueller; 18.04.2010
comment
Ваше предположение верно. Я помню, как видел это некоторое время назад. Поищите бенчмарки на языке Vala (по сути, С#, который переводится на стандартный С), у него был бенчмарк моно против .net - person jdc0589; 23.08.2010
comment
@Расмус Хорошая находка! Сама статья датирована 2005 годом, но люди продолжают проводить бенчмарки и оставлять результаты в комментариях. - person Andrew Андрей Листочк&; 23.08.2010
comment
Vista csc :: Java - person igouy; 21.04.2011
comment
Поскольку оба они основаны на vm. Важно выбрать vm. Оба выбирают официальную виртуальную машину — это хороший выбор. - person madper; 14.02.2013
comment
Mono в 2 раза медленнее, чем CLR. - person user1496062; 03.12.2013
comment
Я не уверен насчет обычных приложений, но я видел тесты веб-приложений для Mono и .NET, и .NET был в 2-5 раз быстрее. - person ; 03.09.2014

Вот хорошее недавнее исследование по этому вопросу:

Численная производительность в C, C# и Java

Питер Сестофт ([email protected])

ИТ-университет Копенгагена, Дания

Версия 0.9.1 от 19 февраля 2010 г.

Аннотация: Мы сравниваем числовую производительность C, C# и Java в трех небольших случаях.

...

person Ohad Schneider    schedule 17.04.2010
comment
Вывод из статьи: Эксперименты показывают, что нет очевидной связи между скоростями выполнения различных программных платформ, даже для самых простых изучаемых здесь программ: платформы C, C# и Java по-разному самые быстрые и самые медленные. - person Thorbjørn Ravn Andersen; 17.04.2010
comment
Они выполнили тестовые программы на Mac OS X. Для C# они использовали моно и использовали виртуальную машину для проверки производительности среды выполнения .net. На мой взгляд, эталонные значения С# ошибочны. - person user23127; 13.01.2013
comment
И снова моно на 100% медленнее, чем CLR. - person user1496062; 03.12.2013
comment
Численная производительность означает использование примитивных типов без каких-либо объектов, виртуальных функций и т. д. Это упускает 80% языка. - person Aleksandr Dubinsky; 29.11.2015

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

Java ближе [к C++ по производительности], чем C#, благодаря отличной работе в виртуальных машинах, подобных HotSpot, которые используют питчинг кода и распределение стека.

person Aleksandr Dubinsky    schedule 29.11.2015

Это может привести к флейму, но эй, это мое мнение...
Прежде всего, если ваш сайт работает слишком медленно, вам понадобится более качественное оборудование. Или добавьте больше оборудования и добавьте балансировку нагрузки на свой сайт. Если вы Google, вы получите огромные серверные фермы с тысячами компьютеров, которые будут обеспечивать молниеносную производительность, даже если сами сайты разработаны на каком-то устаревшем языке.
Большинство языков были оптимизирован для получения максимальной отдачи от своего оборудования и превзойдет любой другой язык в этой конкретной среде с определенной настройкой. Сравнение языков не имеет особого смысла, потому что существуют тысячи способов их еще большей оптимизации. Кроме того, как вы измеряете производительность для начала?
Допустим, вы смотрите на скорость выполнения. Язык X может выполнять некоторые задачи в 2 раза быстрее, чем язык Y. Однако язык Y более оптимизирован для запуска нескольких потоков и может обслуживать в 10 раз больше пользователей, чем язык X, за то же время. Объедините это, и Y будет намного быстрее в среде клиент/сервер.
Но затем установите X на оптимизированную систему с операционной системой, которая очень нравится X, с дополнительным оборудованием, миллиардом байтов памяти и дискового пространства и дюжина процессоров или около того, и X снова превзойдут Y.
Итак, в чем ценность знания скорости выполнения языков? Или даже сравнение языков? Откуда мы знаем, что создатели отчета не были предвзяты? Как мы можем быть уверены, что они использовали самые оптимальные настройки для каждого языка? Написали ли они вообще самый оптимальный код для тестирования? И как вообще сравнивать конечные результаты? Время выполнения на пользователя? Или общее время выполнения?
Вернемся к языкам X и Y. X выполняет задачу за 2 секунды, но одновременно поддерживает только 10 потоков, то есть 10 пользователей. Y требуется 6 секунд, но он обслуживает до 50 потоков одновременно. X будет быстрее для каждого пользователя. За две секунды X обработал 10 пользователей. За 6 секунд X обработал 30 пользователей. Но к тому времени Y обработал бы 50 пользователей. Таким образом, Y превзойдет X, если у вас много пользователей, а X превзойдет Y при небольшом количестве пользователей. (Или темы.) Было бы интересно увидеть отчеты, в которых упоминается это, верно?

person Wim ten Brink    schedule 29.06.2009
comment
Этот ответ больше комментарий, чем ответ. - person Thorbjørn Ravn Andersen; 17.04.2010
comment
По сути, я говорю, что вы просто не можете сравнивать два разных языка, даже если они очень похожи, как C# и Java. Таким образом, сравнение языков бесполезно, если только вы не сравниваете в какой-то конкретной области. - person Wim ten Brink; 18.04.2010
comment
Не волнуйтесь, по крайней мере, это комментарий длиннее 600 символов! :D - person Dominic K; 11.07.2011

2021

Обзор

В течение многих лет приложения, созданные либо на Java, либо на .NET/C#, имели одинаковый уровень производительности. Однако корпорация Майкрософт и многие сторонние участники вложили значительные средства в оптимизацию этого аспекта и продолжают совершенствоваться. Например, веб-инфраструктура ASP.NET Core позволяет обслуживать 7 миллионов запросов в секунду на одном сервере. А согласно тестам TechEmpower, ASP.NET Core намного опережает любую веб-инфраструктуру Java.

Исследования

https://github.com/ixy-languages/ixy-languages

Вот еще одна хорошая демонстрация производительности, которую можно достичь на платформе .NET — пример сверхбыстрого сетевого драйвера, написанного на разных языках. Драйвер, написанный на C#, показывает почти такой же уровень производительности, как C и Rust, чуть лучше, чем язык Go, и намного опережает все другие высокоуровневые языки, включая Java.

Источник

person Rahul    schedule 10.06.2021