Недавно я рассматривал проблему вызова 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# dllImport занимает меньше всего времени, затем идёт node.js, а самым медленным является Python-код, независимо от того, в какой среде он выполняется.
Эффект работы в режиме Release:
Эффект работы в режиме Debug:
На основе данных можно сделать вывод, что выполнение Java в режиме Release по эффективности сравнимо с C#, а в режиме Debug — медленнее C#. Поэтому разработчики Java должны избегать запуска кода в режиме Debug, если это возможно. Что касается причины проблемы, то она требует дальнейшего изучения.
В этом тесте мы рассмотрели обход одного миллиарда элементов данных, а затем выполнили простые логические вычисления. При обеспечении согласованности результатов мы оценили эффективность языка путём наблюдения за потерей времени. Это очень простой метод оценки, который позволяет оценить производительность. Мы приглашаем всех предложить более конкретные сценарии использования для проведения тестов!
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )