使用.NET相较于Win32,我会得到什么好处?有时候我可以通过搜索50-100行代码来重用它们,那么.NET给我带来的价值在哪里呢?
我自从Win32出现以来就一直在开发它(超过15年)。虽然有时候需要调用更多的函数,当然你需要跟踪句柄等,但它非常直观且非常稳健。我们的应用程序(250,000行代码)安装时间不到1分钟,并且极少出现任何兼容性问题。
我关注了SO上关于.NET与Win32的讨论(例如Win32 vs .Net),但它们没有回答这个问题。
使用.NET相较于Win32,我会得到什么好处?有时候我可以通过搜索50-100行代码来重用它们,那么.NET给我带来的价值在哪里呢?
我自从Win32出现以来就一直在开发它(超过15年)。虽然有时候需要调用更多的函数,当然你需要跟踪句柄等,但它非常直观且非常稳健。我们的应用程序(250,000行代码)安装时间不到1分钟,并且极少出现任何兼容性问题。
我关注了SO上关于.NET与Win32的讨论(例如Win32 vs .Net),但它们没有回答这个问题。
仅我个人认为,只有从事Win32开发超过15年的人才能称其为简单且强大。如果你愿意自己编写整个250,000行代码而不是使用组件,那么你的应用程序将很容易安装。但我不确定这种权衡一定值得。
.NET带给你的是更快的开发速度,出于各种原因。更高层次的抽象、优秀的组件可以轻松集成、没有指针问题、较少需要管理自己的内存或句柄。如果您已经从事Win32开发15年了,也许您不需要这些任何东西。但是,您是否曾经招聘过新的初级程序员呢?我确信他们会比学习Win32更快地学习.NET。在你甚至能说出“Hello world”之前,Win32中有太多需要学习的内容。
在转向ASP.NET / ASP.NET MVC进行Web开发之前,我已经使用C ++开发游戏约8年。从我的角度来看,使用.NET而不是本地C ++代码时,以下是最重要的优点:
http://msdn.microsoft.com/en-us/library/ms679351%28VS.85%29.aspx
仅为实现这么简单的功能?这就是“直截了当”的吗?
Win32 API 是设计最糟糕、最复杂和难以正确使用的 API 之一。它唯一能够做到的一致性就是使易于理解的用法变得错误,并要求大量的操作才能实现正确性。
但当然,任何花费十年时间与 API 工作的人都已经面对过这些问题并习惯了它们。对你来说可能没有问题。而且更好的是,既然你已经有了应用程序,你可以继续使用它。没有理由将其丢弃并从头开始使用 .NET。
但是,如果今天你要从头开始启动一个项目,那么
两个词的概括:
垃圾回收。
.NET本身实际上是围绕Win32 API构建的,因此在原则上,您可以使用Win32 API做任何.NET可以做的事情。.NET的优点在于开发的便捷性 - 这也意味着更快的交付和更少的错误。.NET的调试能力也要好得多。
.NET的安装和运行速度并不是什么大问题。您可以用任何语言编写糟糕的软件,就像您可以用任何语言编写良好的软件一样。在.NET中有不同的技巧和窍门,而C ++中则有不同的技巧和窍门(所以这肯定需要学习曲线),但最终两者都同样出色。
我甚至听说过一个传言,即一个良好编写的C#程序实际上可能比一个等效的C++程序更快,因为JIT编译器可以针对特定的CPU优化汇编代码,而C++优化器只能进行通用优化。不过我不知道这是否属实。
.NET软件的兼容性也与C ++类似。一方面,它需要安装.NET框架,但另一方面,由于强名称和GAC,不再存在DLL地狱的问题。而且许多东西已经在默认安装中了,而您通常需要在C++中使用第三方库(如XML解析,DB连接性,SOAP web服务,RPC等)。我认为这是平衡的,并且.NET可执行文件的较小尺寸肯定是一个优点。
如果不了解你的应用程序性质,很难回答这个问题。如果它是一个典型的内部业务应用程序,需要大量的数据库访问和报告生成,我会说.NET提供了很多优势。但如果它是游戏、图像处理或者一般面向广泛客户群体销售的产品,我建议使用Win32。
.NET让你能够使用真实的语言编写Sql Server存储过程。试着在Win32 DLL中做到这一点。
除了你已经提到的观点之外...
实际上,我认为你会发现 .NET 包装了很多 win32 功能。