【问题标题】:I want to reduce my VS.NET project's compile time - what are your ideas for how to do this?我想减少我的 VS.NET 项目的编译时间 - 你对如何做到这一点有什么想法?
【发布时间】:2009-08-25 04:38:10
【问题描述】:

我的项目是在 Visual Studio 08 中用 C# 开发的。它是一个独立的桌面应用程序,大约 60k 行代码。 曾几何时,我喜欢在这个软件上工作 - 现在编译时间已经增长到大约 2 分钟,它变得不那么愉快了......

我认为我缺乏 C# 经验可能是一个因素;例如,我已经在一个命名空间下开发了所有东西——如果有一个结构良好的代码库,编译器是否可以在进行更改时只重新编译代码的必要部分?还是我需要将部分分成单独的项目/DLL 以强制发生这种情况?

升级到最新的四核处理器会有多大不同?

另一个想法是,也许这是程序员要处理的典型事情 - 像这样长的编译时间只是必须管理的事情吗?

提前致谢。

【问题讨论】:

    标签: c# .net visual-studio compiler-construction


    【解决方案1】:

    增加编译时间的事情:

    • 解决方案中的项目数量比特定项目中的文件数量差异更大。
    • 自定义构建任务可能会产生巨大的不同,尤其是在它们生成代码或运行构建后分析(FxCop、StyleCop、代码合同)时。
    • 构建原生代码项目需要更长的时间。

    包含 60K 行 C# 代码且未启用特殊构建功能的单个项目应该可以在过去 5 年以上制造的任何机器上在几秒钟内编译。

    【讨论】:

    • FxCop 和 StyleCop 会显着减慢速度,尤其是当您有很多对其他程序集的引用时。
    • 你说得完全正确——我一直在运行一个混淆过程作为构建后事件,这完全是我观察到的延迟的原因。谢谢你的帮助!!
    【解决方案2】:

    我很惊讶 60k 行代码需要 2 分钟才能编译。我有一个 500,000 行代码的应用程序,它只需要大约一分半钟。确保您没有每次都进行完全重建,并确保您没有在构建之间清理解决方案。正常构建应该执行增量构建,仅重新编译自上次构建以来发生更改的代码(以及受该更改影响的任何内容。)

    也许其他一些因素可能包括大量资源(图像?)的大量使用,最底层库(即其他一切使用的库)的广泛变化等。一般来说,在相对现代的机器上,编译 60,000除非您要重新构建整个解决方案,否则 C# 代码行平均需要不到一分钟的时间。

    【讨论】:

    • 感谢您的回复! “正常的构建应该执行增量构建,只重新编译自上次构建以来发生更改的代码(以及受该更改影响的任何内容。)” - 这是我认为会发生的事情 - 显然没有考虑到您的经验。所以大概是有什么问题导致了完全重建——无论是配置还是结构。我将进一步研究增量构建的机制并希望将其弄清楚
    • AFAIK,C# 编译器只会以每个项目的粒度增量构建。编译器的性能将抵消跟踪增量构建缓存的任何可能的好处。换句话说,按“构建”不应该构建未更改的项目,而是构建已更改的项目。
    • 这取决于您要更改的代码。如果更改的代码是项目其余部分的依赖项的程序集的一部分,它将触发(几乎)完全重建。
    • 没错,增量构建是每个项目的。但是,如果大多数项目没有更改并且不受依赖项更改的影响,那么它们将被跳过。人们的看法是,您获得了解决方案范围的增量构建,这通常可以进行一些非常快速的构建(无论如何,这比我遇到的任何 C++ 构建都要快得多……这些事情总是运行数十分钟。)
    • 我一直在运行一个混淆过程作为构建后事件,这完全是我观察到的延迟的原因。谢谢你的帮助!!
    【解决方案3】:

    有这个关于硬件的thread 可以提高编译时间。还有这个非常出色的blog post,来自 Scott Guthrie,他在研究硬盘驱动器速度方面的性能。

    【讨论】:

      【解决方案4】:

      将您的项目拆分为多个项目会有所帮助。只有那些有变化的项目(以及依赖它的项目)才需要重新编译。

      然而,单个命名空间不应影响编译时间。但是,如果您确实将项目拆分为多个项目/程序集,那么单个命名空间绝对不是一个好主意。

      升级到更快的 CPU 可能会有所帮助,但您可能会发现更快的 I/O(更好的磁盘、RAID 等会更有用)。

      是的,避免长编译时间是开发人员需要注意的事情之一。在生产力方面,尽你所能(更好的工具、更大的屏幕、更快的机器等......)

      【讨论】:

      • Visual Studio/MSBuild 解析项目文件(以及庞大的辅助 .buildtarget 文件)所花费的时间比实际运行 csc.exe 所花费的时间更多。添加更多项目,增加更多构建时间。
      • 有道理。但是通过拆分更改,其中许多工件不需要重新构建,这将节省总体时间。我认为检查不会那么耗时。
      • 我们正在处理 354 个项目,而我们的构建时间实在是太长了。将一个项目中的一个注释更改为多个项目会导致 VS 重建大约 100 个项目(至少)。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-23
      • 1970-01-01
      • 2014-01-10
      • 1970-01-01
      相关资源
      最近更新 更多