Какие преимущества имеет разработка приложения Win32 на C++ по сравнению с приложением .NET на C#?

StackOverflow https://stackoverflow.com/questions/562620

Вопрос

Я изучил программирование Windows с использованием Visual C++ и Win32 API.Сегодня кажется, что большинство приложений разрабатываются в .NET с использованием C#.Я понимаю, что в большинстве случаев разница в производительности между собственным и управляемым кодом невелика.Итак, мне интересно, если бы я сегодня начал писать новое настольное приложение, есть ли какая-либо причина (кроме того факта, что я лучше знаком с C++), что я мог бы вместо этого написать его на неуправляемом C++? .NET?Есть ли еще какие-то преимущества у использования C++ и машинного кода?Или этот метод был более или менее заменен .NET на платформе Windows?

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

Это было полезно?

Решение

  • Производительность (определенные ситуации, например графика)
  • След памяти (как сказал Манкузо)
  • Использование существующих библиотек
  • Нет необходимости во времени выполнения
  • Более точный контроль

Чтобы перечислить некоторые из них.

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

Кроме того, вы можете использовать C++/CLI для включения как собственного кода, так и кода .net.

Другие советы

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

Некоторые люди могут быть разочарованы, увидев, что для вашего приложения размером 2 МБ на самом деле требуется еще 20 МБ загрузки платформы и утомительный процесс установки.Если они не уверены, действительно ли им нужно ваше приложение, они могут просто удалить его, даже не опробовав, и перейти к конкурирующему продукту.

Если ваше приложение должно работать без установки (т.если вы не можете или не должны делать что-то вроде установки .NET framework), вы не можете рассчитывать на то, что .NET будет на компьютере с Windows (до Vista).Многие служебные приложения могут попасть в эту категорию.

Я бы посоветовал писать каждое настольное приложение на управляемый код..NET/C# — отличная платформа для этого.

Мои причины:

  1. Снижение производительности незначительно.Google для тестов, если вы не верите мне на слово.Гораздо важнее сам код.Вы можете писать алгоритмы O(n^m) на C++ или .NET/C#.Двигатели JIT в наши дни очень зрелы.
  2. Неуправляемый C++ имеет серьезные недостатки, когда дело доходит до модульное тестирование, макетирование и рефакторинг.Это очень громоздко и негибко.Отражение позволяет управляемому коду делать такие вещи очень удобными.
  3. Развертывание — небольшая проблема.Однако создание установки, которая проверяет наличие необходимых предварительных условий .NET и автоматически устанавливает их, не составляет труда.
  4. Компиляция происходит быстрее, нет компоновщика!Это даже происходит в фоновом режиме, когда вы редактируете код.
  5. .СЕТЬ поддержка библиотеки намного лучше и чище, чем STL, MFC и boost.
  6. Никаких заголовочных файлов и макросов..Они просто склонны к ошибкам.
  7. Безопасность!Прощайте, переполнение буфера, плохие указатели, неинициализированные переменные...
  8. Исключения.Четкая иерархия исключений в .NET.Исключения C++ перепутаны.

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

Если вы можете позволить себе зависимость от стека, перейдите к .NET Modern, Elegant, мощный и в результате гораздо быстрее для разработки.

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

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

+1 за то, что не требуется пакет/установка .NET на целевых машинах.Это по-прежнему большая проблема.

Когда все машины будут иметь моно или NET, это не будет такой уж большой проблемой.

Две вещи, о которых я могу подумать.

  1. Защита интеллектуальной собственности.Кому-то гораздо сложнее перепроектировать неуправляемое приложение C++.Управляемые приложения .Net или Java можно легко декомпилировать, чего нельзя сказать о неуправляемом C++.

  2. Скорость.C++ ближе к аппаратному обеспечению и требует меньше памяти, как упоминалось в другом комментарии.Вот почему большинство видеоигр по-прежнему пишутся на C++ и встроенном ассемблере.

Программы .Net также имеют пожизненную поддержку, в отличие от нативных программ.Native будет работать в течение многих лет на разных ОС, не требуя обновлений.

Программы .Net могут быть повреждены плохой конфигурацией .Net, нативные программы просто продолжают работать и на них практически не влияют обновления ОС.

Программы .Net запускаются медленно и работают вяло, нативные программы запускаются быстро и работают быстро.

.Net должен быть закодирован с учетом наименьшего общего знаменателя (самая распределенная версия платформы), Native компилирует весь код в приложение - так что используйте то, что хотите.

Используйте Delphi для Native, а не C++..Net частично основан на Delphi RAD и серверной части Java.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top