我使用Visual C++和Win32 API学习了Windows编程.如今,似乎大多数应用程序都是使用C#在.NET中开发的.据我所知,大多数情况下,本机代码和托管代码之间没有太大的性能差异.所以我想知道,如果我今天开始编写一个新的桌面应用程序,是否有任何理由(除了我对C++更熟悉的事实),我可能想用非托管C++编写它.NET?使用C++和本机代码还有一些优势吗?或者在Windows平台上用.NET或多或少取代了这种方法?
当然我知道编写低级设备驱动程序和类似程序的人不会在.NET中这样做.我要求参考典型的面向客户端的应用程序,这些应用程序不会直接进行硬件调用.
对于小型可下载应用程序而言,IMO最重要的一点是本机代码不需要.NET运行时.虽然宽带变得越来越普遍,但几乎每个人都没有.
有些人可能会失望地看到你的2 MB应用程序实际上需要另外20MB的框架下载和一个麻烦的安装过程来运行.如果他们不确定他们是否真的需要您的应用程序,他们可能会在尝试之前将其删除并转向竞争产品.
性能(某些情况,如图形)
内存占用(如Mancuso所说)
使用现有的库
不需要运行时
更好的控制
列举一些.
但是,您可能还希望从相反的角度来看待问题,以公平地评估要使用的语言.
此外,您可以使用C++/CLI来合并本机和.net代码.
如果您的应用程序需要能够在没有安装的情况下运行(即,如果您不能或不应该执行安装.NET框架之类的操作),那么您不能指望.NET在Windows机器上运行(在Vista之前) ).许多实用程序应用程序可以归入此类别.
我建议用托管代码编写每个桌面应用程序..NET/C#是一个很好的平台.
我的理由:
性能损失可以忽略不计.如果你不接受我的话,谷歌的基准测试.更重要的是代码本身.您可以用C++或.NET/C#编写O(n ^ m)算法.如今,JIT引擎非常成熟.
在单元测试,模拟和重构方面,非托管C++有很大的缺点.这非常麻烦且不灵活.Reflection允许托管代码使这些事情变得非常方便.
部署是一个小问题.但是,创建一个检查必要的.NET前提条件并自动安装它们的设置是不费吹灰之力的.
编译更快,没有链接器!它甚至在编辑代码时在后台发生.
.NET 库支持比STL,MFC和boost更好,更清洁.
没有头文件和宏.它们只是容易出错.
安全!好再见缓冲区溢出,坏指针,未初始化的变量......
例外.清除.NET中的异常层次结构.C++异常搞砸了.