Win32 vs .Net

时间:2009-07-14 19:42:56

标签: .net c++ windows winapi

.NET是否优于Win32或其他方式? 这将是两者的优点和缺点,在什么情况下一个会比另一个更好。 微软是否已发布.Net作为Win32的替代品?

我不是在询问需要维护的项目数量,而是关于 正在开发的新项目,哪些项目会更好。 你认为.Net缺少win32的重要内容(不使用dllImport)吗? 你认为Win32将被.Net

取代

我问这个,因为我和我的一个朋友争吵, 而且我们都同意这两点都必须深入研究 我的朋友辩称.Net是不完整的,我说它几乎可以管理任何任务 非司机相关。 .Net在哪里失败?

7 个答案:

答案 0 :(得分:20)

这些都来自我的POV。您的里程可能会有所不同。

.NET的优点:

  • 跨平台功能(通过Mono和.Net Core)
  • 良好的框架类选择通常意味着更少的代码。
  • 无论组件编码的语言如何,都可轻松集成组件。(您喜欢F#或IronPython,非常棒!用最合适的语言编写程序集。)

.NET的缺点:

  • .NET对不同的人意味着不同的东西。 (例如,WPF在哪里进入等式?)
  • 有时DLLImport和/或PInvoke是获得所需功能的唯一途径,这意味着您将失去跨平台功能。

WIN32的优点:

  • 如果您知道自己在做什么,就可以构建具有最小依赖性的优秀应用程序。
  • 比基于.NET的解决方案更适合“低级”操作。

WIN32的缺点:

  • 如果你不知道自己在做什么,你可以轻易地以更多的应用程序或系统致命的方式射击自己。
  • 您经常需要编写使用.NET“免费”获得的代码。

两者都有自己的位置,并且可能会继续存在,直到真正的替代操作系统(Midori?某种形式的基于Web的操作系统?)上线并获得广泛认可。

答案 1 :(得分:15)

.Net(或者WinForms部分,无论如何)位于 Win32之上。或者,换句话说,Win32用于构建.Net表单组件。所以从这个意义上说,你可以将.Net视为一组预先构建的win32小部件。您还可以将.Net视为MFC的逻辑继承者。

.Net还可以在必要时直接调用Win32 API,为您提供垃圾回收,BCL中非常好的类库,以及C#和VB.Net中C / C ++的许多优秀语言功能

获得所有这些东西所失去的是一定程度的独立性。 .Net是一个附加的框架,默认情况下不附带所有版本的Windows,因此您需要在部署时担心额外的依赖关系。在使用任何高级垃圾收集语言时,您还需要考虑性能因素,其中看似简单的代码可能比您在幕后所做的要多得多。对于某些winforms组件尤其如此。

答案 2 :(得分:9)

你似乎已经意识到简短的答案,但为了清楚起见,我将在此重申:

Win32:功能强大且完整。 Windows平台上的任何记录行为都可以通过Win32编写,但是功能带来了责任和难度。在创建丰富的Win32体验方面存在相当大的微妙和难度。

.Net:功能强大,但是Win32的一个子集。 .Net为绝大多数业务线应用程序提供了足够的功能,但是丰富的用户界面和特定的专业情况根本就不存在,因为无论出于何种原因,BCL都不相信它感觉支持它。我遇到的最常见的例子是新版Windows中的UI功能,尽管PInvoke还有其他领域很有用。 .Net是一个更简单的模型来掌握和工作,然而,(根据我的经验).net的微妙之处很少不太可能射击我的脚比Win32。

如果你包括dllimport和PInvoke,那么我猜想.Net是一个合理的替代方案,能够在90%以上的任务中表现得相当好,而且WPF为托管世界带来了完全不同级别的丰富UI。

答案 3 :(得分:7)

这不是一个公平的比较,两者之间没有比较好的,这一切都取决于你想要完成的事情。对于大多数开发任务,.Net非常复杂,甚至可能比Win32具有更好的性能。另一方面,.Net甚至可以在窗户外运行,只需看看Mono。现在,为了开发驱动程序和低级别的东西,你可以更好地使用Win32。

答案 4 :(得分:6)

.Net没有取代Win32。 Win32是操作系统级别的界面,您可以将.Net视为一个位于Win32之上的小型OS环境或虚拟机。 .Net提供硬件架构中立性(如果您的客户端运行在Pentium IV,Core 2 Duo,Itanium,32位,64位或其他任何设备上,则无关紧要。)。Net提供了一个了解这些环境的优化安装程序,因此如果一条指令说“移动一百万字节”,它将使用平台上可用的“最优化”移动指令。

.Net使开发人员更容易:内置垃圾收集可以防止一个非常常见的错误,即忘记释放内存。 Visual Studio IDE集成可以说是任何语言的最佳开发环境。原型屏幕和代码肯定很快。 (当然,Visual Studio为编写Win32 API的C / C ++编码器提供了许多相同的优势。)

但是.Net以性价格实现了这些目标。代码必须在最终用户的机器上进行“即时”编译(JITted)才能运行。 .Net框架需要5-15兆字节的RAM才能加载足够的代码来执行“Hello World”。 .Net框架在速度低于400MHz或RAM少于512 MB的机器上表现不佳(您可以在更小,更慢的盒子上运行它,但其性能必须在逐个应用程序的基础上进行评估。)

答案 5 :(得分:1)

您的问题中的

.NET隐含C#C++/CLI.NET C++/CLI C#是不自然的。另一方面使用.NETWin32比使用{{1}}更舒服。

答案 6 :(得分:-3)

用于HW访问WIN API是最佳选择。它更快,因为它直接与低级设备对话但没有免费午餐;您的代码将更复杂,并且不会原谅糟糕的编码。