大型项目的C#编译时间(与C ++相比)

我经常听到人们称赞C#的编译速度。 到目前为止,我只做了一些小应用程序,实际上我注意到编译速度非常快。 但是,我想知道这是否适用于大型应用程序 。 大型C#项目的编译速度是否比类似大小的C ++项目快?

是的,C#通常编译速度更快。 虽然并不总是足够快。 我最大的C#代码库可能有一百万行代码和大量项目需要大约一个小时来编译。 但我怀疑这段时间大部分是由于视觉工作室构建系统不佳。 另一方面,编译C ++的时间通常要长得多,但也更依赖于组织代码的方式。 对头文件依赖性的不良处理可以轻松地将编译时间增加几个数量级。

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

有时,增量c ++编译可能比C#快很多。 如果你的所有C ++头文件(和设计)处于非常好的状态(参见大型C ++软件设计 , 有效的C ++等书 )你可以改变大多数系统使用的类的实现并且只有一个dll重新编译。

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

但总的来说,我发现C#编译得足够快,但是大型C ++项目的编译速度很慢,我发现自己不想因为重建时间而将方法添加到“基类”。

拥有大量Visual Studio项目并在每个项目中都有一些类可以减慢C#构建的速度。 将相关项目组合在一起然后“信任”开发人员不使用对命名空间私有的类有时会带来很大的好处。 ( nDepends可用于检查违反规则的人)

(当试图加速C ++编译时,我发现FileMon非常有用。我工作的一个项目,STL被添加到头文件中,构建速度慢得多。只需将STL添加到预编译头文件就可以了!因此,跟踪您的构建时间并调查它何时变慢

据我所知,是的,C#比C ++项目编译速度快得多。 即使是大型应用。

这可以通过以下事实来解释:C#作为一种语言比C ++更简单,并且C#被转换为IL(可以在以后对机器代码进行优化和翻译)并且C ++立即转换为机器语言。

我也观察到C#的编译速度明显快于C ++。 其中一个主要原因当然是模板不需要在C#的头文件中,因为没有标头。 但是大量使用模板(主要是像Boost这样的现代C ++库)正在扼杀C ++中的编译时间。