Конкретные различия в производительности некоторых функций в Java и C # - PullRequest
1 голос
/ 28 марта 2011

В настоящее время я делаю некоторые тесты производительности в Hibernate / Hibernate.Search с Lucene в Java и с кулоном в C #. В настоящее время я использую новейшие версии обеих версий.

У меня были некоторые интересные результаты в тестах, но сейчас я занимаюсь поиском тестов производительности или лучше объяснения возможных различий в производительности в обоих языках.

Например: я знаю, что дженерики в C # более эффективны, потому что они не используют бокс во время выполнения, потому что они безопасны от типов. Кроме того, два разных списка со ссылочными типами могут совместно использовать JIT-код в C #. Так что в C # теперь есть накладные расходы на бокс. ( знание пришло из этой статьи )

Это пример, который я искал.

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

Я нашел много статей / книг о различиях, но не так много о различиях в производительности в отдельных общих функциях этих двух языков.

Но важно сказать, что я не просто ищу некоторые тесты, которые делаются, но и более глубокие объяснения, почему один язык быстрее, чем другой в этой функции.

Спасибо за любые подсказки и помощь!

Ответы [ 2 ]

2 голосов
/ 28 марта 2011

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

Но поскольку они схожи по своей природе и используют схожие архитектуры, при выборе между C # или Java производительность является очень маленькой проблемой,Обычно, когда у кого-то возникают проблемы с производительностью, он / она может выбрать другие алгоритмы, выполнить настройку или просто использовать более качественное оборудование.

Если вы хотите написать статью о производительности языка, я предлагаю вам включить C ++ и поговорить об оптимизации кодалучше использовать аппаратные ресурсы (например, специальные инструкции), потому что именно они обеспечивают высочайшую производительность сегодня.В библиотеках могут быть созданы процедуры сборки для сжатия ЦП для некоторых операций с большими данными.Интерпретированные языки могут выполнять более специфичные для нагрузки и аппаратные оптимизации, но при этом оставшиеся оптимизации в значительной степени относятся к статическому анализу кода.

http://en.wikipedia.org/wiki/Program_optimization

2 голосов
/ 28 марта 2011

Любое сравнение производительности языков - это просто предположение по определению.

Производительность приложений на Java и C # зависит от множества функций. Прежде всего, это зависит от виртуальных машин, которые запускают приложения. Итак, вы сравниваете две разные виртуальные машины для разных языков. Но все еще есть трудности только при сравнении виртуальных машин Java.

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

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