2015-06-12 19 views
-4

Я решал простой вызов кодирования на онлайн-сайте. Я написал код на C, C++ и C# для той же проблемы. Как только вы решите проблему, веб-сайт дает некоторые статистические данные о правильности и производительности. вот что-то поразило меня. код C# занял 0,06 секунды, чтобы выполнить и дать мне результат, когда C занял 0,006 секунды, а C++ занял 0,009 секунды.Почему код C# занимает много времени для выполнения по сравнению с C и C++

Мой вопрос, почему код C# работает в 10 раз медленнее? или, по сути, c/C++ работают в 10 раз быстрее?

ссылки на сайт ниже.

C code
C++ Code
C# Code

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

+0

Вы можете найти ответы на http://stackoverflow.com/q/686483/79061 –

+0

Что вы ожидаете от ответа? Общее правило типа «C++ в x раз быстрее/медленнее» не существует. Однако C++ «часто» быстрее, чем языки, такие как C# и Java (если коды хорошо написаны для каждого сравниваемого языка. Написание медленных программ возможно на каждом языке) – deviantfan

+1

Предоставление кода в качестве внешних ссылок - плохая идея. Если ссылки будут мертвыми, этот вопрос станет бесполезным. –

ответ

3

C# составлен в общий промежуточный язык. Затем запускается Just In Time (JIT). По сути, код компилируется по мере необходимости. C и C++ компилируются на родной язык ассемблеров компьютеров. Это означает, что при запуске ничего не должно произойти. Хотя это общий обзор, я прошу вас заглянуть в JIT и CIL, так как это поможет вам разобраться на более глубоком уровне. Вы можете посмотреть их здесь: Common Intermediate Language, Just In Time

+1

Вообще говоря, виртуальные машины/среды исполнения часто имеют накладные расходы/задержки. Это более сложная проблема с виртуальной машиной Java, чем с CLR. Вполне возможно, что код C# действительно работает так же быстро, как эквивалентный C++-код (или, по крайней мере, это время выполнения находится в одном порядке) ... только с C#, может потребоваться больше времени, чтобы добраться до точки, где код может быть запущен CPU (запуск VM, загрузка и интерпретация метаданных IL, методы JIT-компиляции). – stakx

+0

Я одобрил и отредактировал свой комментарий, он был изначально изначально. Я полностью перепутал его. @MickyDuncan – Bob

+0

Дополнительная точка - сайт может включать время JIT в измерение, полностью искажая результаты ... –

0

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

Так что C++ быстрее, во многих случаях. Но это только часть ответа. Случаи, когда C++ на самом деле быстрее, являются высоко оптимизированными программами, где экспертные программисты тщательно оптимизировали ад из кода. Это не только очень много времени (и, следовательно, дорого), но также часто приводит к ошибкам из-за чрезмерной оптимизации.

Помните, что быстрый тест, подобный вашему, не означает многого. C++/c будут иметь почти идентичный run-timesto C# во многих и многих ситуациях, за исключением некоторых почти всех ситуаций, с которыми вы, вероятно, столкнетесь.

 Смежные вопросы

  • Нет связанных вопросов^_^