我经常听到人们赞美C#的编译速度。到目前为止,我只做了一些小应用程序,而且我注意到编译速度非常快。但是,我想知道这是否仍然适用于大型应用程序。大C#项目比类似大小的C++项目编译速度更快吗?C#编译大型项目的时间(与C++相比)
回答
就我自己的经验而言,是的,C#编译速度比C++项目快得多。即使是大型应用程序。
这可以通过以下事实来解释:C#作为一种语言不像C++那么复杂,并且C#被转换为IL(可以优化并稍后转换为机器码),并且C++立即转换为机器语言。
是的,C#通常编译速度更快。虽然时间不够快。我最大的C#代码库可能有一百万行代码和很多项目,大约需要一个小时才能编译。但我怀疑这很大程度上是由于视觉工作室糟糕的构建系统。另一方面,编译C++的时间通常要长得多,但也更依赖于如何组织代码。头文件依赖关系的处理不好可以轻松地将编译时间增加几个数量级。
+1对于糟糕的头文件处理发表评论 - 我们通过整理头文件在我们的大型C++项目上从1小时减少到8分钟! – 2009-06-30 08:27:48
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添加到预编译的头文件中就会产生很大的差异!因此,跟踪您的编译时间并调查其编译时间。)
这也是我的观察结果,C#比C++编译速度快得多。主要原因之一是当然模板不需要放在C#中的头文件中,因为没有头文件。但大量使用模板(主要是像Boost这样的现代C++库)正在使用C++来缩短编译时间。
- 1. VS2008中的巨大OBJ文件C++编译与VS6相比较
- 2. C++编译时类型比较
- 3. 编译大型Xcode项目
- 4. 为“C”的项目在编译时
- 5. 编译基于大型组件的C++项目
- 6. 与优化级别编译C++项目
- 7. C++项目不编译
- 8. 编译时间类型检查C++
- 9. C++编译时间类型确定
- 10. C++项目在编译时挂起
- 11. 在运行时编译c#项目
- 12. 如何加快我的CMake C++项目的编译时间?
- 13. 如何加快C++ eclipse项目的编译时间
- 14. C#项目的编译器选项
- 15. 错误编译的Visual Studio C++项目 - 错误与cl.exe时
- 16. 组织大型C++项目
- 17. 编译时间很长C++
- 18. 如何减少本地Visual C++编写的大型项目的链接时间?
- 19. C/C++项目在Xcode编译,但不能与GCC/G ++
- 20. C++编译与
- 21. 在emacs中编译大型项目
- 22. 用clang编译大型项目++
- 23. VS2008无法编译旧的C++项目
- 24. 编译Linux上的Objective-C项目(Ubuntu)
- 25. 编译没有VS的C#项目
- 26. VS2010:编译64位的C++项目
- 27. C#项目的资源编译
- 28. C++中的正则表达式与GNU项目C和C++编译器
- 29. 编译大型头文件C++
- 30. Intellij想法测试编译时间太长(与Eclipse相比)
我也想知道。我用C#编写了一个小应用程序,与C++相比编译速度惊人。 – Naveen 2009-06-30 07:07:18
我在一个解决方案中有超过40个项目(我没有创建它)花了很长时间(大约1分钟)在PIV上编译。将我的PC升级到Core 2将其缩减到更可接受的时间,就像将代码重构为更少的项目一样。拥有大量项目将影响C#项目的编译时间。 – RichardOD 2009-06-30 07:58:48