Win32 vs .Net
Является ли .NET лучше, чем Win32 или наоборот?
Который был бы плюсами и минусами обоих, в каких ситуациях лучше быть лучше других.
Microsoft выпустила .Net в качестве замены для Win32?
Я не спрашиваю о том, сколько проектов нужно поддерживать, но о
новых проектов, которые будут лучше для чего.
Как вы думаете .Net не хватает важных вещей из win32 (без использования dllImport)?
И как вы думаете, Win32 будет заменен на .Net
Я спрашиваю об этом, потому что у меня есть аргумент с моим другом,
и поскольку мы оба согласны, то они должны быть изучены по глубине
Мой друг утверждает, что .Net является неполным, и я говорю, что он может справиться практически с любой задачей
не связанные с водителем. Где происходит сбой .Net?
Ответы
Ответ 1
Все это из моего POV. Ваш пробег может отличаться.
Преимущества .NET:
- Возможности кросс-платформы (через моно и .Net Core)
- Хороший выбор классов инфраструктуры обычно означает меньше кода.
- Легкая интеграция компонентов, независимо от языка, на котором был закодирован компонент. (Вам нравится F # или IronPython, отлично! Кодируйте свои сборки в зависимости от того, какой язык наиболее подходит.)
Недостатки .NET:
- .NET означает разные вещи для разных людей. (Например, где WPF входит в уравнение?)
- Иногда DLLImport и/или PInvoke - это единственный способ получить необходимую функциональность, что означает, что вы потеряете кросс-платформенную возможность.
Преимущества WIN32:
- Если вы знаете, что делаете, вы можете создавать отличные приложения с минимальными зависимостями.
- Более подходит для операций "низкого уровня", чем решение на основе .NET.
Недостатки WIN32:
- Если вы не знаете, что делаете, вы можете легко стрелять себе в ногу в большем количестве случаев применения или системы.
- Вам часто приходится писать код, который вы получите "бесплатно" с помощью .NET.
Оба имеют свое место и, вероятно, будут существовать до тех пор, пока не будет установлена настоящая замена ОС (Midori. OS?) Выходит в интернет и получает широкое признание.
Ответ 2
.Net(или части WinForms, во всяком случае) находится поверх Win32. Или, по-другому, Win32 использовался для создания компонентов .Net. Поэтому в этом смысле вы можете думать о .Net как о наборе готовых виджетах win32. Вы можете также думать о .Net как о логическом преемнике MFC.
.Net также имеет возможность напрямую обращаться в API Win32, дает вам сборку мусора, очень хорошую библиотеку классов в BCL и множество приятных языковых функций над C/С++ в С# и VB.Net.
То, что вы теряете, чтобы получить все эти вещи, - это определенная степень независимости..Net - это надстройка, которая по умолчанию не поставляется со всеми версиями окон, поэтому у вас есть дополнительные зависимости, о которых нужно беспокоиться при развертывании. У вас также есть соображения производительности, чтобы думать о том, когда используете какой-либо высокоуровневый сборник мусора, где, казалось бы, простой код может делать намного больше, чем вы ожидаете за кулисами. Это особенно верно для некоторых компонентов winforms.
Ответ 3
Вы уже, кажется, знаете короткий ответ, но я повторю его здесь для ясности:
Win32: мощный и полный. Любое документированное поведение на платформе Windows может быть составлено с помощью Win32, но с властью возникает ответственность и трудности. Там довольно значительное количество тонкости и сложности в создании богатых опытов Win32.
.Net: Мощный, но подмножество Win32..Net предоставляет более чем достаточную возможность для подавляющего большинства приложений для бизнеса и других приложений, но богатый пользовательский интерфейс и конкретные специализированные ситуации просто не существуют внутри него, потому что BCL по какой-либо причине не считает, что он делает смысл его поддерживать. Самый распространенный пример, с которым я столкнулся, - это возможности пользовательского интерфейса в новых версиях Windows, хотя есть и другие области, где PInvoke полезен..Net - гораздо более простая модель, позволяющая понять и работать внутри, и (по моему опыту) тонкость .net гораздо реже снимает меня в ногу, чем Win32.
Если вы включите dllimport и PInvoke, то я бы предположил, что .Net - разумная альтернатива, способная хорошо выполнять 90%% задач, а WPF привносит в управляемый мир совершенно другой уровень богатого пользовательского интерфейса.
Ответ 4
Это не справедливое сравнение, между ними нет лучшего, все зависит от того, что вы пытаетесь выполнить. Для большинства задач разработки .Net очень сложна и может даже иметь лучшую производительность, чем Win32. С другой стороны,.NET может запускать даже внешние окна, просто посмотрите на Mono. Теперь для разработки драйверов и низкоуровневого материала вам лучше всего работать с Win32.
Ответ 5
.Net не заменяет Win32. Win32 - это интерфейс уровня ОС, и вы можете думать о .Net как о маленькой суб-ОС-среде или виртуальной машине, которая находится поверх Win32..Net обеспечивает нейтральность аппаратной архитектуры (неважно, работает ли ваш клиент на Pentium IV, Core 2 Duo, Itanium, 32 бит, 64 бит или что-то еще.).Net предлагает оптимизированный установщик, который понимает эти среды, поэтому что если инструкция говорит "переместить миллион байт", она будет использовать "самую оптимизированную" команду перемещения, доступную на платформе.
.Net делает некоторые вещи проще для разработчика: встроенная сборка мусора предотвращает очень распространенную ошибку, забывая освободить память. Интеграция IDE Visual Studio, возможно, является лучшей средой разработки на любом языке. Это, безусловно, быстро для прототипов экранов и кода. (Конечно, Visual Studio предлагает многие из тех же преимуществ для написания кодера C/С++ в API Win32.)
Но .Net достигает этих вещей по цене исполнения. Код должен быть "точно в срок" скомпилирован (JITted) на машине конечного пользователя до его запуска. Рамка .Net занимает от 5 до 15 мегабайт оперативной памяти, чтобы загрузить достаточно кода для выполнения "Hello World". Рамка .Net не будет работать на машине медленнее 400 МГц или с объемом памяти менее 512 МБ (вы можете запускать ее на меньшем, более медленном поле, но ее производительность должна оцениваться по отдельности на основе приложения.)
Ответ 6
.NET
в вашем вопросе подразумевается C#
или C++/CLI
?
.NET
с C++/CLI
является чем-то неестественным. С другой стороны, использование C#
с .NET
более удобно, чем с Win32
.
Ответ 7
для HW доступ к WIN API - лучший выбор. его быстрее, потому что он напрямую относится к устройствам низкого уровня, но без бесплатного обеда; Ваш код будет более сложным, и он не прощает за плохое кодирование.