Есть ли какая-либо причина использовать Win32 API (в C или C ++) поверх .СЕТЬ? [закрыто]

11
задан Kizaru 18 August 2010 в 17:35
поделиться

7 ответов

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

Мне нравится работать в .NET. До того, как он стал доступен, я работал в основном над графическим интерфейсом пользователя, написанным на C ++ с использованием MFC и Win32. Когда я перешел на .NET, мне пришлось полностью пересмотреть свои оценки, потому что я мог делать вещи быстрее!

Чтобы ответить на ваши актуальные вопросы: существуют менее распространенные сценарии разработки, в которых .NET не помогает (и некоторые могут сказать, что это мешает). Как правило, они включают низкоуровневое использование аппаратной связи или тонко настроенное программирование COM.

Обратите внимание, что вы можете разрабатывать на C ++ для .NET, что позволяет вам легко переходить между Win32 и .NET. (Это не стандартный C ++, когда вы разрабатываете для CLR, но также несложно уловить различия.)

Не рассматривайте производительность без реального сценария, который вы действительно можете протестировать. Для интересного сравнения производительности .NET и C ++ при выполнении одной и той же задачи ознакомьтесь с записью в блоге (и ссылками!) Здесь: http://blogs.msdn.com/b/ricom/archive/2005/05/ 10 / 416151.aspx

8
ответ дан 3 December 2019 в 02:10
поделиться

.NET просто скрывает всю "утомительную" или базовую работу Win32 API? Конечное программное обеспечение потребляет больше системных ресурсов или работает медленнее в .NET?

Да, он пытается скрыть все утомительные детали. И да, приложение .NET будет в целом медленнее и, вероятно, потреблять больше ресурсов, чем аналогичное приложение, написанное на C и Win32.

Но жертва производительности обычно является незначительной платой за повышение производительности и простоту обслуживания.

Я понимаю, что такой близкий к «голому железу» фактор программирования с использованием простого C и чистого win32 может показаться очень заманчивым, но мне трудно оправдать, когда было бы во много раз проще и быстрее использовать .NET. .

8
ответ дан 3 December 2019 в 02:10
поделиться

.NET привлекателен тем, что это более производительная платформа разработки. Многие части платформы .NET предоставляют частичную оболочку Win32 API. Хотя фреймворк действительно абстрагируется от множества «утомительных» вызовов Win32 API, это не мешает мне время от времени нуждаться в небольшом PInvoke.

Вы обнаружите, что .NET framework действительно связан с небольшими накладными расходами и не столь эффективен, как C или C ++; однако часто приходится искать компромисс между производительностью и эффективностью. Что важнее, будут зависеть от требований конкретного приложения. Во многих программах требования должны быть «достаточно эффективными» и могут полностью соответствовать требованиям разработки .NET.

5
ответ дан 3 December 2019 в 02:10
поделиться

.NET предназначен для сокрытия утомительных деталей Win32 API. В одних отношениях он преуспевает, в других - терпит неудачу. Если большая часть того, что вы пишете, хорошо согласуется с тем, что MS пытается поддерживать, это вполне может преуспеть. Если вы уйдете на «девственную территорию», вы можете полностью потерять преимущество и даже потребовать много дополнительной работы по сравнению с собственным кодом, использующим Win32 напрямую.

Получающееся программное обеспечение (по сути, всегда) потребляет больше ресурсов, чем собственный код. Единственный реальный вопрос - насколько намного больше памяти он использует, насколько он работает медленнее и т. Д.

На эти вопросы, к сожалению, трудно ответить. Скорость может быть от , по сути, , идентична скорости в 8 раз меньше или около того. Использование памяти постоянно немного выше (например, по крайней мере в 2 раза, часто в 3-5 раз. Один интересный момент заключается в том, что сборка мусора дает компромисс между скоростью и потреблением памяти (запуск GC чаще снижает использование памяти за счет использование большего количества процессорного времени). Таким образом, время выполнения будет зависеть как от доступности памяти, так и от скорости процессора.

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

3
ответ дан 3 December 2019 в 02:10
поделиться

Простой ответ на ваши вопросы - «нет», «да» и «не обязательно» в указанном порядке. Другими словами, .NET делает гораздо больше, чем просто «скрывает» Win32 API, в одних случаях он оборачивает его, в других расширяет, а в третьих полностью игнорирует.

Программное обеспечение, разработанное с помощью платформы .NET, часто будет потреблять больше ресурсов, чем простая и средняя сборка, написанная вручную, которая (теоретически) может быть создана экспертом, но во многих случаях разработчик C или C ++ будет использовать платформы. и наборы инструментов, которые так же тяжелы, как .NET framework, и разница будет незначительной. Еще одна вещь, которую следует учитывать, - это то, что в наши дни обычно не имеет значения, потребляет ли программа несколько дополнительных килобайт памяти. Никто не замечает. Если преимущества разработки на .NET (или любой другой технологии) перевешивают риски, тогда это лучший выбор. Только вы можете сказать это для вашей конкретной ситуации.

Что касается «производительности», это ужасно большая категория, но поскольку код .NET скомпилирован на машинный язык (он не интерпретируется), в целом разница невелика. Опять же, программист, занимающийся сборкой жесткого кода, скорее всего, победит его, но примените анализ затрат и выгод, чтобы определить, стоит ли оно того для вас.

5
ответ дан 3 December 2019 в 02:10
поделиться

Я основываю свой ответ на одном: C ++ - это стандарт iso. C # - это собственный язык Microsoft.

Если вы когда-нибудь захотите расширить свои знания и навыки, выходящие за рамки Windows, ISO C и C ++ увидят вас намного дальше.

.NET имеет большую структуру, но если вы знаете, где искать, есть ОГРОМНЫЙ корпус lgpl и (если вы совместимы с ним) программное обеспечение с открытым исходным кодом gpl, написанное для C и C ++. boost становится массивной библиотекой, которая имеет большую часть (не GUI) функциональных возможностей, предлагаемых .NET, но в стандарте кросс-платформенной.

Тем не менее, если вы не против продать свою душу и посвятить свою карьеру постоянному успеху одной компании ... У C # / .NET есть два больших бонуса, которые Win32 API не предлагает:

  • Трудно написать код на C ++, который бы не протекал. Несмотря на то, что я ненавижу идею сборки мусора, она эффективна.
  • WPF - это то место, где Microsoft добавила красивые вещи для разработки пользовательского интерфейса, начиная с XP. они выглядят так же, как обычные элементы управления Windows: кнопки, текстовые поля, списки, которые есть в собственных приложениях Win32, но под крышкой они поддерживают рисование без мерцания, поддерживают альфа-канал и могут быть анимированы и покрыты оболочкой.
0
ответ дан 3 December 2019 в 02:10
поделиться

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

Практически все основано на нем. (Это и COM.) Это все равно, что изучать работу регистров на процессоре, вместо того, чтобы считать его "черным ящиком".

Все действительно хорошие (профессиональные) программисты Windows, которых я знаю, знают его и знают его хорошо.

Programming Windows Чарльза Петцольда является практически библией по Win32 и, IMO, хорошо написана и выполнена.

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

3
ответ дан 3 December 2019 в 02:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: