Какие преимущества есть у разработки приложения Win32 в C ++ по сравнению с приложением .NET в C #? - PullRequest
16 голосов
/ 18 февраля 2009

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

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

Ответы [ 9 ]

18 голосов
/ 18 февраля 2009

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

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

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

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

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

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

8 голосов
/ 18 февраля 2009

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

7 голосов
/ 19 февраля 2009

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

Мои причины:

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

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

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

2 голосов
/ 18 февраля 2009

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

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

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

2 голосов
/ 18 февраля 2009

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

0 голосов
/ 04 октября 2016

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

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

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

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

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

0 голосов
/ 19 февраля 2009

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

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

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

...