Win32 vs .Net

flo*_*nau 13 .net c++ windows winapi

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

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

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

Ric*_*ter 20

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

.NET的优点:

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

.NET的缺点:

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

WIN32的优点:

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

WIN32的缺点:

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

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


Joe*_*orn 15

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

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

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


Gre*_*g D 9

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

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

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

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


Otá*_*cio 7

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


Joh*_*ers 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的机器上表现不佳(您可以在更小,更慢的盒子上运行它,但其性能必须在逐个应用程序的基础上进行评估.)