.NET的用法会给我什么,我没有使用Win32 - 有时可能使用Google搜索可以重复使用的50-100行代码?
我正在开发Win32,因为它存在(> 15年)。它直接且非常强大,虽然有时它需要比你期望的更多的呼叫,当然你需要跟踪手柄等。但是我们的(250.000 LOC)应用程序安装在不到1分钟内很少见有任何兼容性问题。
关于.NET与Win32的关于SO的几点讨论(即 Win32 vs .Net)。但是他们没有回答这个问题。
答案 0 :(得分:24)
答案很简单:更高层次的抽象和与幕后“真实”事物脱钩。这就是.NET可以在其他操作系统上实现的原因。
事实上,如果没有.NET,这一切都是可能的,但这是不切实际的。简短示例:.NET中的WCF为您提供了每个人都可以使用的第一类IPC和SOA框架。它内置功能。在win32中,您可以使用第三方库或其他任何方式获得相同的自编码。用户群很小,你没有那个大的社区支持你的问题,而且很难实现。 .NET Framework为您提供了开箱即用的功能。
对于大量应用程序,.NET将加快开发时间并使开发更便宜。
对于特殊类型的应用,情况恰恰相反。例如。使用.NET开发实时应用程序(几乎)是不可能的,因为级别2上的GC会冻结所有线程。
补充:
.NET Framework 4.5包含一个增强的垃圾收集器。它为服务器垃圾收集器启用了多线程后台垃圾回收(使用app.config中的< gcServer>元素启用),该收集不会冻结应用程序线程。
不幸的是Mono垃圾收集器并不是那么先进,所以Mono的基本声明仍然是正确的。
答案 1 :(得分:15)
恕我直言,只有那些已经开发Win32超过15年的人可以称之为简单而强大。如果您愿意自己编写全部250,000行而不是使用组件,那么您的应用程序将很容易安装。我不确定这种权衡是否值得。
出于各种原因,.NET为您提供的是更快的开发。更高的抽象,更好的组件,没有指针问题,更少需要管理自己的内存或句柄。如果你已经开发了Win32 15年,也许你不需要任何这些。你有没有聘请新的初级程序员?我确信他们比Win32更快地学习.NET。在你甚至可以说“Hello world”之前,你需要在Win32中学到很多东西。
答案 2 :(得分:6)
在使用ASP.NET / ASP.NET MVC切换到Web开发之前,我已经用C ++开发了大约8年的游戏。从我的角度来看,这些是使用.NET而不是本机C ++代码时最重要的优势:
答案 3 :(得分:6)
易于使用。并且与.NET框架的其余部分(非Win32相关部分)易于互操作。
.NET没有什么神奇之处,它只是一大堆用于轻松完成常见任务的预定义类。其中许多任务都是“创建窗口”或其他Win32功能。
至于Win32是“直截了当,健壮”的,我不这么认为。
这是一个很好的例子:程序员将需要的最基本的功能之一:检索与刚刚发生的错误相关的错误消息:
http://msdn.microsoft.com/en-us/library/ms679351%28VS.85%29.aspx
只是为了实现这个简单的功能?这是“直截了当”的吗?
Win32 API是最糟糕的设计,最复杂和最难以使用(正确,至少)的API之一。它能够始终如一地做到的唯一一件事就是简单,直观地使用错误,并且需要大量的步法来实现正确性。
但是,当然,任何花了十年时间使用API的人都已经遇到过这些问题而已经习惯了。对你来说可能没问题。甚至更好,因为你已经拥有了你的应用程序,你也可以坚持下去。没有理由把它扔掉并重新开始.NET
但如果你今天从头开始一个项目,那么
答案 4 :(得分:6)
两个字总结:
<强> Garbage collection 强>
答案 5 :(得分:2)
WinAPI用于与最低级别的Windows进行交互,并涵盖Windows操作系统为消费者提供的所有功能。
.Net是一个框架,一个运行时和一大堆库,它们用于不同的目的并抽象Windows API。它基本上提供隐藏windows API的OO抽象。
如果您使用.Net,仍透明地使用WinAPI,如果您选择通过PInvoking进入本机API,则可以直接使用它。
是否通过WinAPI选择.Net取决于您要构建的应用程序类型。如果它是一个重度shell集成的应用程序然后使用WinAPI,如果不是,但你需要使用强大的XML,连接(WCF),图形(WPF)或数据访问(ADO.Net,Linq)库,并需要提高生产力.Net提供和交易一些灵活性(你需要确保.Net在目标计算机上运行,这不再是一个大问题)不是和问题,然后选择.Net。
答案 6 :(得分:2)
.NET本身实际上包含了Win32 API,因此原则上你无法使用Win32 API做的.NET。 .NET的优势在于易于开发 - 这也意味着更快的交付和更少的错误。 .NET中的调试功能也要好得多。
.NET的安装速度和运行时间不是什么大问题。您可以用任何语言编写糟糕的软件,就像您可以用任何语言编写好的软件一样。 .NET中有不同的提示和技巧,而不是C ++(所以这里肯定是学习曲线),但最终两者都同样好。
我甚至听说过这样一个传言:编写好的C#程序实际上比同等的C ++程序更快,因为JIT编译器可以优化特定CPU的程序集,而C ++优化器只能进行通用优化。我不知道这是否属实。
.NET软件的兼容性也类似于C ++。一方面它需要安装.NET框架,但另一方面 - 由于强大的名称和GAC,不再有DLL地狱。很多东西已经在默认安装中,你通常需要在C ++中使用第三方库(比如XML解析,数据库连接,SOAP Web服务,RPC等)。我认为这是平衡的,而且规模较小.NET可执行文件肯定是一个奖励。
答案 7 :(得分:2)
如果不了解应用程序的性质,很难回答这个问题。如果它是一个典型的内部业务应用程序,有大量的数据库访问和报告生成,我会说.NET带来了很多东西。如果它是游戏,图像处理,或者一般来说是你向广大客户销售的东西,我会坚持使用Win32。
答案 8 :(得分:1)
.NET使您能够以实际语言编写Sql Server存储过程。尝试在Win32 DLL中执行此操作。
答案 9 :(得分:0)
除了你已经提出的观点......
实际上我认为你会发现.NET包含了很多win32功能。
答案 10 :(得分:0)
一些优点:
多语言支持。现在很容易在Delphi中编写应用程序并使用这个应用程序的逻辑在VB中编写的代码。没有更多的COM,没有更多异国情调的技术 - 只需“添加参考”,它就可以了。大多数情况下,因为一直存在一些问题,但与COM相比,.NET问题几乎不存在。
易于使用。在Win32 API中,每次调用都应该有很多初始化代码。初始化之后,您通常必须使用一些标志来调用API方法以了解期望的内容以及如何为此调用分配缓冲区,然后再次调用此API方法,并使用其他参数来实际执行此操作。毕竟,有一些清理代码。在.NET中,你通常只是调用一些方法,因为所有杂乱的东西都隐藏在里面。
.NET远远高于WinAPI。那么,现在Framework是使用WinAPI编写的,但是在几年内(比如Windows 9?),它将是.NET Framework将由内核公开的内容。旧版应用程序将使用一些旧版翻译器 - 用.NET Framework编写的WinAPI。
答案 11 :(得分:0)
当我开发MS-DOS应用程序时,我也想知道类似于Windows开发的东西。 Windows很有趣,但我觉得DOS更实用。也就是说,直到我开始编写Windows应用程序并注意到Windows API非常有用。我用于Windows(Delphi)的RAD环境使我很容易为我的应用程序开发一个漂亮的GUI。使用Borland Pascal,虽然Turbo Vision确实为DOS提供了非常有用的环境,但这有点复杂。 大约8年前,当.NET被引入时,我只是认为它是Windows应用程序的一个大型运行时库,就像Windows本身是一个很酷的MS-DOS图形库一样。这不是一个银色的子弹或金锤来解决你的问题解决方案。这只是让开发变得更容易的事情。
但是,当我将我的Windows应用程序与MS-DOS进行比较时,我仍然觉得DOS更强大。但是对于我来说,Windows可以轻松地做很多事情。将.NET与WIN32进行比较时也是如此。事情变得更容易发展。
答案 12 :(得分:0)
我发现当我使用.NET编写C ++时,Visual Studio Express 8中的表单编辑器会一直崩溃整个IDE。当我使用普通的Win32进行C ++时,这不会发生。当我使用.NET和C#编写表单时,这种情况不会发生,因此除了C#之外,我不得不再次使用.NET。
答案 13 :(得分:0)
.NET使用的虚拟机非常适合跨平台编码。如果你没有对.NET以外的函数进行任何非托管调用,那么它可以在支持.NET的任何地方运行。
像X-Box 360.或Windows CE / Mobile / Whatever。
对于微软和Windows开发人员来说,这将是件好事,因为使用像ARM这样的CPU,低功耗设备会更高效。 ARM 不将运行您的IA32 Windows应用程序,但它将在MS为ARM WinCE构建.NET之后运行您的.NET应用程序。
Java当然也是这样做的,如果你想要的话,它在跨平台支持方面更好,更成熟。