我应该使用哪个平台:本地C++还是C#?

6

我想开发一个Windows应用程序。如果我使用本地的C++和MFC来制作用户界面,那么应用程序将非常快速和小巧。但是使用MFC非常复杂。而且如果我使用C#,那么应用程序将比本地代码慢,并且需要.NET框架才能运行。但是使用WinForm来开发GUI非常容易。你更喜欢哪个?


1
什么类型的Windows应用程序?你的目标操作系统是什么?答案很大程度上取决于你的目标是什么。 - Aaron Fischer
14个回答

19
“快”和“慢”是主观的,特别是在当今的电脑上。我并不是故意让事情变慢,但编写托管应用程序时,几乎没有像你想象的那样多的开销。JIT等工具非常有效地使代码执行非常快。如果你确实需要,你还可以使用NGEN来提高启动速度。
实际上,如果你有时间学习,你可能会考虑使用WPF而不是winform——这是一种不同的技能集,但允许你非常好地利用图形硬件等。
此外——.NET框架随着新的操作系统安装而来,并且在比它更早的操作系统上仍然非常普遍。因此,对我来说,使用C#/.NET开发是一个相当明显的选择。开发一个“健壮且经过完全测试”的C++应用程序(没有泄漏等)的时间(至少对我来说)比使用C#相同要长得多。

没错,C#.NET 在这里似乎是更实际的选择。 - Kon
我认为“主观上的慢”不再由开销决定 - 而主要取决于用户界面的响应能力。 - peterchen
制作一个没有泄漏的应用程序是一件容易的事情。如果你结构良好...我已经多年没有出现过泄漏了。话虽如此...我也会选择C#..只是市场更大而已。 - baash05

6

要注意不要过早优化;你提到代码速度,但对于大多数Windows用户界面操作来说,两种方法的主要瓶颈——绘图和磁盘访问并没有什么不同,因此差异并不明显。

我的建议是使用C#和WPF或WinForms来制作用户界面。如果遇到一些缓慢的情况,请使用分析器确定位置,然后考虑用本地代码替换一些业务逻辑,但前提是有好处。


4

有许多可能的Windows应用程序,每个应用程序都有自己的要求。

如果您的应用程序需要快速运行(而我所从事的工作确实需要),那么使用本机C++是一个不错的选择。

如果您的应用程序需要变得更小(也许是为了在慢速线路上传输),那么请使用任何可以使其更小的方法。

如果您的应用程序很可能被大量下载,则可能要对后期版本的.NET保持警惕,因为您的用户可能还没有安装。

如果像大多数应用程序一样,在它可能被使用的系统上运行速度和大小足够快且小,那么请使用最能让您快速开发和优化的方法。

几乎在所有情况下,正确的优化对象是开发人员的工作。使用任何可以最快最好地完成高质量工作的方法。


3

首先..(虽然我是一位狂热的c++编程人员)我必须承认,在大多数情况下,c#在速度和大小方面都非常好。在某些情况下,应用程序更小,因为解释部分已经在目标系统上。 (不要在这个问题上向我发送垃圾邮件,一个带有dll的应用程序比全部在一个应用程序中更小。Windows恰好已经随着“DLL”出现了。)

至于编码..我真的不认为有什么显著的区别。我不会花很多时间打代码。大部分时间都在思考问题。代码部分相当少。在这里节省几行代码..这对我来说并不是一个争论的点..如果是的话,我就会在APL中工作。学习STL、MFC等等也可能像学习c#库一样强化。最终它们都是一样的。

C#确实有一个优点..市场。它是最新的“热门”技能,因此有市场需求。找工作很容易。现在请记住,几年前Java是一个“热门”技能,现在每个人的简历上都有它。这使得你更难以成为一个特定领域的专家。

好的..所有这些都说了..我喜欢c++..没有什么比在真正需要时变得肮脏的感觉更好了。当MFC库无法胜任工作时,我会看看它们所依赖的内容等等..它是一种常青语言,我相信它仍然是世界上使用最多的语言之一。是啊,c++,耶!


2

请注意,大多数Windows计算机已经安装了.NET,所以这真的不应该成为一个问题。

此外,除了.NET安装之外,.NET应用程序往往非常小。

对于大多数带有UI的应用程序来说,用户速度才是真正的限制时间因素。


1

C# 应用程序启动比 MFC 应用程序慢,但一旦应用程序加载完成,您可能不会注意到两者之间的速度差异。


没错,但CLR 4(.NET 4.0)应该会显著提高.NET应用程序的冷启动时间。 - Scott Dorman

1

没有关于您计划开发的应用程序的信息,我建议使用WPF。


1

在我看来,需求应该帮助你决定平台。什么更重要:拥有一个易于维护的应用程序还是必须非常快速和小巧的应用程序?

现今许多应用程序可以使用.NET和托管代码编写,这通常对长期开发有益。根据我的经验,大多数情况下.NET应用程序的速度已经足够快,并且它们更容易创建。 原生C++仍然有其用途,但仅仅因为“更快更小”,当“足够快和足够小”已经足够时,这并不足以成为正当理由。


1

本地代码和托管代码之间的速度参数在这一点上基本上不是问题。每个 .NET Framework 的发布都会对以前的版本进行性能改进,应用程序性能始终是 .NET 开发团队非常重视的事项。

从 Windows Vista 和 Windows Server 2008 开始,.NET Framework 作为操作系统的一部分安装。它也是 Windows Update 的一部分,因此几乎任何 Windows XP 系统也都已安装了它。如果要求在目标机器上安装框架确实是一个大问题,那么还有编译器可以将所需的运行时部分嵌入到您的应用程序中生成单个 exe,但它们很昂贵(而且在我看来,不值得花费)。


1

MFC并不难学,实际上非常容易。

几乎与C#相当。


同意。我认为这很容易。而且,如果需要,你甚至可以更深入地了解事物。 - baash05
2
完全不同意,我见过的每个MFC项目都是一团糟。这确实对工具有所暗示,而不仅仅是开发人员的问题。 - Dustin Getz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接