Visual Studio 9解决方案中的项目数量是否会影响解决方案加载和构建时间?

时间:2009-01-18 09:25:35

标签: visual-studio-2008 projects-and-solutions build-time

我对解决方案加载时间特别感兴趣构建时间 - 更少的解决方案意味着更好的性能吗?

请注意,我指的是构建应用程序的性能。

使用较少数量的项目时,加载时间和构建时间是否更有效?

作为指南,我们的Visual Studio解决方案中有50-60个项目。

10 个答案:

答案 0 :(得分:13)

  

(我特别感兴趣的是   解决方案加载时间&建造时间 -   更少的解决方案意味着更好   性能?)

帕特里克·斯马奇亚(Patrick Smacchia)的相关主题描述了拥有少量集会的好处(此后项目数量很少)。他准确地谈到了装配数量如何影响构建时间和其他因素。

我鼓励您阅读Patrick博客。他有很多关于代码组件化的文章。

Here is

Advices on partitioning code through .NET assemblies

Lessons learned from the NUnit code base

从我个人的经验来看,拥有几十个项目的解决方案是一件痛苦的事。拥有10个以上项目的IMO将导致明显的维护问题并影响您的工作效率。

答案 1 :(得分:4)

我依赖于你的项目,大部分时间我都在使用10-15。 项目越少,构建时间越短。

我通常拥有的项目是:

  • 具有异常和错误处理的基础项目
  • 业务逻辑
  • 数据访问层 - 存储库
  • WebForms或WinForms或WPF UI

其中一些我将分成3-4个其他项目。我也有NUnit测试项目。

答案 2 :(得分:3)

50-60对我来说听起来很多。我发现使用 lot 项目,打开Visual Studio可能需要很长时间。如果你改变许多其他项目所依赖的项目,那么构建时间可能会很糟糕,但我不知道10个项目之间有多少不同,每个项目有20个类,100个项目各有2个项目。 (换句话说,我不确定构建中的每个项目开销。)即使你没有改变任何东西,大概每个项目都必须检测它是否需要重建任何东西 - 我无法想象这是免费的,但如果不用自己的代码尝试,就很难给出更明确的信息。

我去过各个公司,这些公司有很多项目,每个项目只有几个班级,很容易合并到一个项目中。根据我的经验,这也有维护/可管理性的好处。 (当然不要无所事事 - 只是明智的。)

如果您实际上有大量合理的项目,只考虑其中很多,请考虑尽可能地拆分解决方案。如果他们都是小项目,请考虑将其中一些项目结合起来。如果你还没有发现自己正在等待Visual Studio(开放/建设),那么不要太担心。

答案 3 :(得分:3)

在解决方案中包含太多项目是个坏主意。它会影响构建时间。请参阅使用多个构建工具对构建时间进行比较的this article。根据文章,Visual Studio每个项目需要2秒,即使项目不是构建的一部分。

这也符合我的经验,Visual Studio是最慢的构建工具之一。在Visual Studio 6和2006之间,对于一个相对简单的C项目,我的构建时间从1分钟变为5分钟。

答案 4 :(得分:3)

晚会,但到目前为止,没有一个答案提到构建配置。 您可以在解决方案中拥有大量项目,而无需在每次运行时都构建它们。单击Debug / Release组合并创建一个新的构建配置 - 您可以在那里决定要构建或不构建的项目。

为什么这样?我这样做是为了让我可以随意“去定义”,这样我就可以快速地将项目交换到我的构建中,而无需完成所有Add项目的痛苦。

另请注意,如果您有解决方案文件夹,则可以右键单击并构建该文件夹,该文件夹将构建文件夹中的所有项目。

答案 5 :(得分:1)

我在创建大量小项目时遇到的问题是:

1 / 封装:您希望在两个项目之间共享的类,方法或属性必须是公共的,因此可以从任何地方看到。你拥有的项目越多,你披露一些秘密的可能性就越大......

2 / 程序集总数:正如 Aku 所写,更少的项目会减少程序集。由于每个项目在本地复制它们使用的程序集,因此您可以在文件夹中获得(n *(n - 1))/ 2个程序集(程序集1的49个副本,程序集2的48个,...)。对于50个项目,这是 1176 文件! =>好吧,你可能要少得多(200?),但它仍然需要在这里和那里得到一个或两个过时的副本......

答案 6 :(得分:1)

我参与了一个包含大量项目的项目,范围在50-60,我发现与开发人员懒惰/健忘相关的问题相比,加载时间长是可以接受的。

许多项目依赖于基础库,因此需要在更改基础库时重建。由于项目在任何给定时间都有一些变化,开发人员只能处理子集意味着如果他们是懒惰的,他们将不会在从CM工具收到更新时重建整个应用程序。然后,他们可以花费大量时间来解决事情,解决事情被破坏的原因。如果VS已知整个依赖关系树并且快速构建全部可以使其全部正常工作,则全部解决了。

我意识到一个优秀的开发人员会知道这一点并默认情况下这样做,但并不是每个人都很棒,有时即使是伟大的人也有这些日子。

答案 7 :(得分:1)

答案 8 :(得分:0)

在我看来,这只是个人组织和秩序的问题。如果您希望在同一解决方案下有许多以某种方式相互连接的项目,您可以这样做。我想你只需要考虑一下你是否真的需要它们。每个解决方案都没有神奇的最大项目数

答案 9 :(得分:0)

我尝试遵循的一般做法是每个解决方案4-5个项目。

  • 商业逻辑
  • 通讯层(服务器相关)
  • 用户界面
  • 测试项目以利用/测试其他三个项目

这通常符合我们的风格以及我们如何实施它。如果有必要,我们也可以在其中包含其他内容,但这些实例并不像我们这四个那样普遍。