在Visual Studio中有更多项目会增加编译时间吗?

时间:2009-12-01 19:26:45

标签: visual-studio compilation

下面哪种情况编译得更快?

  1. 解决方案中的两个项目。每个项目有5个班级。

  2. 解决方案中的一个项目。该项目有10个类(方案a中两个项目的组合)。

  3. 基本上,我正在尝试查看是否有2个项目会影响解决方案中的编译时间。

9 个答案:

答案 0 :(得分:4)

是的,在大型C#解决方案中,拥有更多项目会使编译时间显着延长(几分钟)。至少,那是我的经历。但是,我想补充一点。我怀疑项目是在没有严格不必要的情况下编译的,因为C#对于它选择编译的东西并不是那么聪明。因此,如果大多数项目没有多少参考其他项目,那可能不是一个问题。我无法确定,因为我所处理的代码(遗留的东西,不是我的,我赶紧补充)有这种问题的代码与POV没有松散耦合。

请注意,慢速编译是某些语言的一个特性(例如,所有基于C语言的语言)。可以在一次通过中编译的语言(例如像Delphi这样的Pascal派生词)编译速度更快(10 ^ 6 LOC,以秒为单位)。

所以无论如何你的速度有限。这主要是硬件问题,因为大多数语言的编译都是磁盘密集型(即缓慢)(FL可能是个例外)。这里的其他线程谈论加速VS编译时间的方法,最大的改进总是通过获得一个非常快的HD或更好的现代SSD。

答案 1 :(得分:2)

编译器通过引用获取每个类。必须首先编译底层(没有内部项目引用),然后编译引用其他内部项目的层,依此类推。因此,是的,编译时间会稍微增加,因为编译器必须对引用进行排序并创建多个二进制文件。

另一方面,大多数大型项目应该分成多个项目和命名空间,以便于阅读和导航。这实际上取决于你正在做什么,但你可以在一个文件,或多个文件或多个项目中的多个文件中实际放置1000个类。在编译时保存的时间量(最小)与在一个布局不佳的解决方案中寻找内容所浪费的时间不相比。

使用5个类的2个项目的解决方案,编译时间将与10个类的单个项目不同。链接和引用是您将看到的唯一真正的增长,而且这是最小的。

编辑:另一方面,如果你有一个足够大的项目,你注意到编译时间的真正差异,你应该考虑实现某种持续集成(参见:http://en.wikipedia.org/wiki/Continuous_integration)环境,这将为您保留当前版本,并让您知道某些内容是否已损坏。

答案 2 :(得分:2)

我会说是的,但我认为时间上的差异将是微不足道的,除非文件非常大(10k行就是它开始减速的时候)

注意:我使用10k行编译的文件只是因为我感到无聊,我从未真正将它用于生产,而是我从以前的项目迁移到一个代码中的很多代码。< / p>

答案 3 :(得分:1)

我会说是的,它确实对单独的项目有影响。项目是一个独立的输出,链接会有所不同。它还必须从其他项目中的引用中找到依赖项。找出答案的唯一方法是尝试。

答案 4 :(得分:1)

拥有更多项目意味着还有更多工作要做,因此几乎肯定会花更多时间。除了实际编译外,至少还必须重复以下操作

  • MSBuild任务
  • 将文件写入磁盘
  • 阅读依赖议会
  • 在解决方案中使用多个项目的一般开销

答案 5 :(得分:1)

我有一个大项目,我正在分裂成较小的项目,我注意到编译时间比以前只需要。所以,是的,它会增加编译时间,但在我的情况下,这只是几秒钟。我可以想象,相关项目越大,变化就会越大。

答案 6 :(得分:1)

更多项目需要更长时间。项目类型可以产生很大的不同。安装项目需要很长时间才能编译,因为所有的压缩和发生这种情况,并且(无论如何)SQL报告项目可能需要很长时间。

答案 7 :(得分:1)

根据我的.Net开发经验,这取决于你是否启用了多线程编译。

VS能够在单独的核心上串联编译多个项目,因此如果你有一个多核系统,单独的项目比一个巨大的项目要快得多。

答案 8 :(得分:0)

您希望我们告诉您哪个更快:一个项目中有10个课程,或者两个项目中每个课程有5个课程。

你不能自己说出差异吗?

如果你能说出差异,那么你可以选择更快的那个。

如果你无法区分,为什么哪个更快?选择一个对你更有意义的那个。

您的问题有问题。编译任何合理大小的10个类的时间很少,因此尝试优化它是浪费你的精力。你真正的问题是什么?