1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/roby-CSharpVsCpp

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
README.md 5.2 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
gitlife-traslator Отправлено 28.11.2024 13:35 2da6dfb

CSharpVsCpp

Введение

Недавно я рассматривал проблему вызова C# интерфейсом, связанным с C++. Я увидел статью о смешанном программировании C# и C++ и анализе производительности (https://www.cnblogs.com/zhuyingchun/p/9127068.html). Затем я провёл оценку проекта и обнаружил, что результаты противоречат автору! Оказывается, C# почти в 7 раз эффективнее C++! Поэтому я выкладываю код для всех, чтобы проанализировать причину.

Похоже, нас ждёт сюрприз!

Описание среды выполнения

Microsoft Visual Studio Enterprise 2017 Версия 15.9.6

Сравнение графиков производительности:

Результаты C#:

10.Result: 1733793664 Elapsed: 942

9.Result: 1733793664 Elapsed: 884

8.Result: 1733793664 Elapsed: 850

7.Result: 1733793664 Elapsed: 892

6.Result: 1733793664 Elapsed: 858

5.Result: 1733793664 Elapsed: 892

4.Result: 1733793664 Elapsed: 883

3.Result: 1733793664 Elapsed: 917

2.Result: 1733793664 Elapsed: 835

1.Result: 1733793664 Elapsed: 877

Всего:

8830

Результаты C++:

10.Result: 1733793664 Elapsed: 4547

9.Result: 1733793664 Elapsed: 4750

8.Result: 1733793664 Elapsed: 4735

7.Result: 1733793664 Elapsed: 4796

6.Result: 1733793664 Elapsed: 4735

5.Result: 1733793664 Elapsed: 4813

4.Result: 1733793664 Elapsed: 4734

3.Result: 1733793664 Elapsed: 4703

2.Result: 1733793664 Elapsed: 4594

1.Result: 1733793664 Elapsed: 4563

Итого:

46970

==============================

Результат сравнения немного неожиданный. C# намного быстрее C++, почти в 7 раз!

==============================

После переключения проектов C++ и C# в режим Release скорость кода C++ мгновенно возросла, а C# по сравнению с Debug стал немного медленнее на несколько десятков миллисекунд.

------------------------------

Ниже приведены данные о производительности кода C++, кода C# и кода C#, вызывающего C++ через DllImport.

(Однако прямой вызов управляемого C++ смешанным способом не работает, компилируется успешно, но при запуске выдаёт ошибку.)

Я потратил много времени, пытаясь понять, почему возникает эта ошибка?

Расширение: .NetCore, Node.js, Python среда

При обеспечении согласованности результатов выполнения один и тот же код выполняется для оценки эффективности: способ C# dllImport занимает меньше всего времени, затем идёт node.js, а самым медленным является Python-код, независимо от того, в какой среде он выполняется.

Расширение: Java (version "1.8.0_172") тестовый код, спасибо за вклад кода @Brave.

Эффект работы в режиме Release:

Эффект работы в режиме Debug:

На основе данных можно сделать вывод, что выполнение Java в режиме Release по эффективности сравнимо с C#, а в режиме Debug — медленнее C#. Поэтому разработчики Java должны избегать запуска кода в режиме Debug, если это возможно. Что касается причины проблемы, то она требует дальнейшего изучения.

В этом тесте мы рассмотрели обход одного миллиарда элементов данных, а затем выполнили простые логические вычисления. При обеспечении согласованности результатов мы оценили эффективность языка путём наблюдения за потерей времени. Это очень простой метод оценки, который позволяет оценить производительность. Мы приглашаем всех предложить более конкретные сценарии использования для проведения тестов!

Опубликовать ( 0 )

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

1
https://api.gitlife.ru/oschina-mirror/roby-CSharpVsCpp.git
git@api.gitlife.ru:oschina-mirror/roby-CSharpVsCpp.git
oschina-mirror
roby-CSharpVsCpp
roby-CSharpVsCpp
master