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

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

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

9 ответов

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

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

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

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

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

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

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

Я бы порекомендовал написать каждое настольное приложение в управляемом коде. .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++ исключения перепутаны.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Другие вопросы по тегам