.NET比Win32更好吗? 这两者的利弊,在哪些情况下会比另一方好。 微软是否发布.Net作为Win32的替代品?
我不是在问需要维护的项目的数量,而是关于正在开发的新项目,哪个会更好。 你觉得.Net从win32(缺less使用dllImport)缺乏重要的东西? 你认为Win32将被.Net所取代
我在问这个问题,因为我和我的一个朋友发生了争执,因为我们都同意这两个问题都必须深入研究。我的朋友认为.Net是不完整的,我说它几乎可以pipe理任何非驱动任务有关。 .Net在哪里失败?
这些都来自我的POV。 你的旅费可能会改变。
.NET的优点:
.NET的缺点:
WIN32的优点:
WIN32的缺点:
两者都有自己的位置,并且可能会继续存在,直到真正的替代操作系统( 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
? .NET
与C++/CLI
是不自然的。 另一方面使用.NET
C#
比使用Win32
更舒适。
对于访问WIN API的HW是最好的选择。 它的速度更快,因为它直接与低层设备通话,但没有免费的午餐; 你的代码会更复杂,不会原谅错误的编码。