Win32 vs .Net

.NET比Win32更好吗? 这两者的利弊,在哪些情况下会比另一方好。 微软是否发布.Net作为Win32的替代品?

我不是在问需要维护的项目的数量,而是关于正在开发的新项目,哪个会更好。 你觉得.Net从win32(缺less使用dllImport)缺乏重要的东西? 你认为Win32将被.Net所取代

我在问这个问题,因为我和我的一个朋友发生了争执,因为我们都同意这两个问题都必须深入研究。我的朋友认为.Net是不完整的,我说它几乎可以pipe理任何非驱动任务有关。 .Net在哪里失败?

这些都来自我的POV。 你的旅费可能会改变。

.NET的优点:

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

.NET的缺点:

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

WIN32的优点:

  • 如果你知道你在做什么,你可以用最少的依赖来构建优秀的应用程序。
  • 比基于.NET的解决方案更适合“低级”操作。

WIN32的缺点:

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

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

.Net(或WinForms部分,无论如何)都位于Win32 之上 。 换句话说,Win32被用来构建.Net窗体组件。 所以从这个意义上说,你可以把.Net当作一套预先构建的win32小部件。 你也可以把.Net当作MFC的逻辑后继者。

.Net也可以在需要的时候直接调用Win32 API,给你垃圾收集,BCL中一个很好的类库,以及C / C ++和VB.Net中的很多很好的语言特性。

你失去了所有这些东西是一定的独立性。 .Net是一个附加框架 ,默认情况下,它并不随Windows的所有版本提供,因此您在部署时有额外的依赖关系。 在使用任何高级垃圾收集语言时,您还需要考虑性能方面的问题,看起来简单的代码可能比您在幕后做的要多得多。 对于某些winforms组件尤其如此。

您似乎已经知道简短的答案,但为了清楚,我将在此重申:

Win32:功能强大,完整。 在Windows平台上的任何记录的行为可以通过Win32组成,但是权力来自责任和困难。 创建丰富的Win32体验有相当多的微妙和困难。

.Net:功能强大,但是Win32的一个子集。 .Net为绝大多数业务线应用程序提供了足够的能力,但是丰富的用户界面和特定的,特殊的情况根本不存在于其中,因为无论出于何种原因,BCL都不相信它感觉来支持它。 我碰到的最常见的例子是Windows新版本中的UI功能,尽管还有其他一些PInvoke有用的地方。 .net是一个简单得多的模型,但是,(根据我的经验),.net的微妙之处不如Win32那么好。

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

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

.Net不会取代Win32。 Win32是操作系统级别的界面,你可以把.Net看作一个小的子操作系统环境或者位于Win32之上的虚拟机。 .Net提供了硬件架构的中立性(无论你的客户端运行在Pentium IV,Core 2 Duo,Itanium,32位,64位还是其他).Net提供了一个理解这些环境的优化安装程序,所以如果一条指令说“移动一百万字节”,它将使用平台上可用的“最优化”移动指令。

.Net为开发人员提供了一些简单的方法:内置的垃圾回收功能可以防止一个很常见的错误,那就是忘记释放内存。 Visual Studio IDE集成可以说是任何语言的最佳开发环境。 原型屏幕和代码的确很快。 (当然,Visual Studio为C / C ++编码器写入Win32 API也提供了许多相同的优点。)

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

你的问题中的.NET意味着C#C++/CLI.NETC++/CLI是不自然的。 另一方面使用.NET C#比使用Win32更舒适。

对于访问WIN API的HW是最好的选择。 它的速度更快,因为它直接与低层设备通话,但没有免费的午餐; 你的代码会更复杂,不会原谅错误的编码。