2009-06-30 61 views
13

我经常听到人们赞美C#的编译速度。到目前为止,我只做了一些小应用程序,而且我注意到编译速度非常快。但是,我想知道这是否仍然适用于大型应用程序。大C#项目比类似大小的C++项目编译速度更快吗?C#编译大型项目的时间(与C++相比)

+2

我也想知道。我用C#编写了一个小应用程序,与C++相比编译速度惊人。 – Naveen 2009-06-30 07:07:18

+0

我在一个解决方案中有超过40个项目(我没有创建它)花了很长时间(大约1分钟)在PIV上编译。将我的PC升级到Core 2将其缩减到更可接受的时间,就像将代码重构为更少的项目一样。拥有大量项目将影响C#项目的编译时间。 – RichardOD 2009-06-30 07:58:48

回答

5

就我自己的经验而言,是的,C#编译速度比C++项目快得多。即使是大型应用程序。

这可以通过以下事实来解释:C#作为一种语言不像C++那么复杂,并且C#被转换为IL(可以优化并稍后转换为机器码),并且C++立即转换为机器语言。

10

是的,C#通常编译速度更快。虽然时间不够快。我最大的C#代码库可能有一百万行代码和很多项目,大约需要一个小时才能编译。但我怀疑这很大程度上是由于视觉工作室糟糕的构建系统。另一方面,编译C++的时间通常要长得多,但也更依赖于如何组织代码。头文件依赖关系的处理不好可以轻松地将编译时间增加几个数量级。

+4

+1对于糟糕的头文件处理发表评论 - 我们通过整理头文件在我们的大型C++项目上从1小时减少到8分钟! – 2009-06-30 08:27:48

6

C++编译起来非常慢,因为每次包含头文件时都必须重新读取和重新分析头文件。由于“#defines”的工作方式,编译器很难自动预编译所有头文件。 (Modula-2在这方面做得更好)为每个编译的C++文件读取100个头文件在很多C++项目中都是正常的。

有时,增量C++编译可能比C#快很多。如果你的所有C++头文件(和设计)都处于非常好的状态(请参阅Large-Scale C++ Software Design,Effective C++这样的书籍)。可以对大部分系统使用的类的实现进行更改,并且只有一个dll重新编译。

由于每当您更改类的植入时,C#没有单独的头文件,即使该类的公共接口未更改,该类的所有用途也会重新编译。这可以通过使用“基于接口的编程”和“依赖注入”等在C#中减少,但它仍然是一个痛苦。

但是总体而言,我发现C#编译速度够快,但是大型C++项目编译起来太慢,我发现自己不想在重建时由于重建时间而将方法添加到“基类”中。

大量的Visual Studio项目在每个类中都有一些类会减慢C#的构建速度。将相关项目组合在一起,然后“信任”开发人员不要使用专用于名称空间的类可以获得很大的好处。 (nDepends可用于检查打破规则的人)

(当试图加快C++编译时,我发现FileMon非常有用。我工作的一个项目,STL被添加到头文件并且构建得到了只要将STL添加到预编译的头文件中就会产生很大的差异!因此,跟踪您的编译时间并调查其编译时间。)

3

这也是我的观察结果,C#比C++编译速度快得多。主要原因之一是当然模板不需要放在C#中的头文件中,因为没有头文件。但大量使用模板(主要是像Boost这样的现代C++库)正在使用C++来缩短编译时间。