与使用 C# 开发 .NET 应用程序相比,使用 C++ 开发 Win32 应用程序有哪些优势?

StackOverflow https://stackoverflow.com/questions/562620

我使用 Visual C++ 和 Win32 API 学习了 Windows 编程。如今,似乎大多数应用程序都是使用 C# 在 .NET 中开发的。据我所知,大多数时候本机代码和托管代码之间没有太大的性能差异。所以我想知道,如果我今天要开始编写一个新的桌面应用程序,是否有任何原因(除了我更熟悉 C++ 的事实之外),我可能想用非托管 C++ 来编写它.NET 的?使用 C++ 和本机代码还有一些优势吗?或者说这种方法在 Windows 平台上或多或少已经被 .NET 取代了?

当然,我知道编写低级设备驱动程序和类似程序的人不会在 .NET 中这样做。我询问的是典型的面向客户端的应用程序,这些应用程序不直接进行硬件调用。

有帮助吗?

解决方案

  • 性能(某些情况,例如图形)
  • 内存占用(正如曼库索所说)
  • 使用现有库
  • 不需要运行时
  • 更精细的控制

列举几个。

但是,您可能还想从相反的角度看待问题,以公平地评估要使用哪种语言。

此外,您可以使用 C++/CLI 合并本机代码和 .net 代码。

其他提示

IMO对于小下载的应用程序的最重要的一个是本地代码不需要.NET运行时。虽然宽带变得越来越普遍不是几乎每个人都拥有它。

有些人可能会失望地看到你的2 MB的应用程序实际上需要框架下载和安装的麻烦过程中运行的另一个20MB。如果他们不知道他们是否真的不需要摆在首位您的应用程序,他们可能只是甚至给它一个尝试之前将其删除,并转向一个竞争的产品。

如果您的应用程序需要能够在不安装运行(也就是说,如果你不能或不应该这样做安装.NET Framework),你不能在.NET平台上的Windows机器上的计数( Vista之前的)。的实用应用程序可以许多属于这一类英寸

我会推荐 编写每个桌面应用程序 托管代码. 。.NET/C# 是一个很好的平台。

我的理由:

  1. 性能损失可以忽略不计. 。如果你不相信我的话,请谷歌查找基准。更重要的是代码本身。您可以使用 C++ 或 .NET/C# 编写 O(n^m) 算法。JIT 引擎如今已经非常成熟。
  2. 非托管 C++ 在以下方面有重大缺点: 单元测试、模拟和重构. 。非常麻烦而且不灵活。反射允许托管代码使此类事情变得非常方便。
  3. 部署是一个小问题。然而,创建一个检查必要的 .NET 先决条件并自动安装它们的安装程序是理所当然的。
  4. 编译速度更快, 无链接器!当您编辑代码时,它甚至会在后台发生。
  5. 。网 图书馆支持 比 STL、MFC 和 boost 更好、更干净。
  6. 没有头文件和宏. 。它们只是容易出错。
  7. 安全!再见缓冲区溢出、坏指针、未初始化的变量......
  8. 例外情况. 。.NET 中清晰的异常层次结构。C++ 异常是混乱的。

内存占用。但是,除非你是一个严重残疾机开发的内存明智的,它真的不应该对于大多数应用程序的问题。

如果你能负担得起的依赖在栈上,去.NET 现代的,优雅的,强大的,其结果更快开发。

但要意识到你链中的应用它 - 在语言和框架,如果你预见,在未来,你可能会想逃离这一点,那么最好三思而后行

Win32的又老又笨重,但它适用于几乎所有的Windows版本而无需额外的依赖,你的代码可以是在平原,便携,C / C ++。

1为不必需要.NET包/安装在目标机器(一个或多个)上。这仍然是一个大问题。

在所有的机器有单或NET也不会是这样一个大问题。

我能想到的有两件事。

  1. 保护知识产权。对于某人来说,对非托管 C++ 应用程序进行逆向工程要困难得多。托管 .Net 或 Java 应用程序可以轻松反编译,但非托管 C++ 则不然。

  2. 速度。正如其他评论提到的,C++ 更接近硬件,并且内存占用更小。这就是为什么大多数视频游戏继续使用 C++ 和内联汇编编写的原因。

.NET程序时也有支持生命周期,其中原生并不真的。本机将跨越不同操作系统的运行多年,而无需更新。

的.Net程序可以通过坏的.Net配置来大清洗,天然只是不断运行和几乎不被OS更新进行。

的.Net程序启动缓慢,呆滞的感觉,原生启动快,运行快。

净已被编码的最小公分母(大多数分布式架构的版本),原生编译所有的代码放到应用 - 所以用你想要的东西。

使用的Delphi为母语,而不是C ++。达网络被部分地基于Delphi RAD和Java后端。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top