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

OSCHINA-MIRROR/roby-CSharpVsCpp

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

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 )

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

Введение

Смешанное программирование на C# и C++ и анализ производительности. Развернуть Свернуть
MIT
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
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