【问题标题】:Long delay before Visual Studio starts to buildVisual Studio 开始构建之前的长时间延迟
【发布时间】:2015-05-06 01:55:00
【问题描述】:

我有一个包含 50 个项目的解决方案,每个项目至少有 100 个文件(我认为这是相关的)。

问题是当我构建解决方案或单个项目时,在“构建输出”窗口被写入之前会有 5 到 10 秒的延迟。将“构建输出”详细程度设置为“诊断”并不能说明延迟的原因。这种延迟甚至在没有文件被更改(以前构建)时也会发生。

=== Build: 0 succeeded, 0 failed, 10 up-to-date, 0 skipped ==========

当有变化时,在构建输出中,它说构建大约需要 2 秒才能完成,但端到端大约需要 7 到 12 秒。

构建输出:

1>(omitted)
1>Time Elapsed 00:00:01.99
========== Build: 1 succeeded, 0 failed, 9 up-to-date, 0 skipped ==========

MSBuild:

Build succeeded.
     0 Warning(s)
     0 Error(s)

 Time Elapsed 00:00:02.17

 C:\Projects\SharedKernel.Tests>

通过命令行运行MSBuild没有这种延迟,2.17秒是按下键盘完成的时间。

据我所知,msbuild 任务本身在 Visual Studio 中执行得很快,但似乎 Visual Studio 在 msbuild 任务开始之前在幕后做了一些事情,导致了这种延迟。

当我通过 Process Monitor 检查 Visual Studio (devenv.exe) 时,我注意到对项目中每个文件和文件夹以及项目依赖项的 CreateFileQueryDirectoryCloseFile 的调用。这似乎与查看时间线时的延迟有关。

如何减少从我在 Visual Studio 中开始构建构建过程(右键单击项目 > 构建)到构建实际发生的延迟?

我查看了以下解决方案的答案,但是它们要么不能减少延迟,要么根本不适用:

【问题讨论】:

  • 当您“构建”解决方案与“重新构建”解决方案相反时,它只会重新构建已更改的文件(.exe 等),因此,如果您进行小的更改,则需要花费很多时间它检查解决方案中的所有文件以查找更改的时间比编写那些小的更改(实际构建)要长。这可能是您遇到的轻微延迟。
  • 在确定需要构建什么之前,它需要查看 5000 个文件并检索它们的时间戳。这需要多长时间很大程度上取决于该信息是否存在于文件系统缓存中。有明显的角度,当它不是时你会抱怨。乘以存储设备的速度。强迫它总是查看 5000 个文件是一个相当基本的组织失败。它会做你要求它做的事情,只是不要指望它会对它充满热情。感知到的 VS 问题总是位于它不再是视觉的角落。是的,它不是。
  • 它比使我成为pick up a sword的数字少一。我不太喜欢剑。
  • @HansPassant 我不知道这如何帮助我解决我的问题。事实上,当通过 msbuild 编译时,它没有延迟。 Msbuild 能够检测文件更改并在适当的情况下重建依赖项,所以我想知道 Visual Studio 的不同之处。
  • 每 15 - 30 秒执行一次 TDD 和运行测试时,这很重要。

标签: c# .net visual-studio visual-studio-2012 msbuild


【解决方案1】:

我认为您的问题是“我有 50 个项目的解决方案”。 以我的经验,这不应该用于开发。这应该只用于构建服务器。 所以我要做的是,制作几个解决方案文件。一个大的包含构建服务器的所有项目,还有几个只有几个开发项目。这几种解决方案的打包应以经常一起变化的内容为指导。如果答案是一切,我会质疑项目结构。

因为我并没有真正回答你的问题 vs 与 msbuild 相比究竟做了什么,所以我通常会把它写成评论。但是我现在的声誉还不够(正在努力),但因为没有其他人推荐这个,我认为它值得一个答案。或者这太明显了,没有人指出这一点?那么请原谅我。

【讨论】:

    【解决方案2】:

    Visual Studio 有自己的方法来检查项目是否是最新的。这可以避免昂贵的 MSBuild 调用,并且通常在只需要构建项目子集时节省大量时间。

    这个问题很老了,现在磁盘往往更快,但上面的 cmets 是正确的。 VS 必须测试项目的每个输入和输出的时间戳,以确定事物是否是最新的。如果您有大量的输入/输出,这可能需要一段时间,尤其是在您的磁盘速度较慢的情况下。

    较新版本的 VS 对最新检查进行了改进。您可以在此处阅读有关 SDK 样式项目使用的快速更新检查的更多信息:

    https://github.com/dotnet/project-system/blob/master/docs/up-to-date-check.md

    【讨论】:

      【解决方案3】:

      我有同样的问题。卸载所有不需要的项目会有所帮助。我设法将构建开始前的时间从大约 9 秒减少到 1 秒。

      我想这更像是一种变通方法而不是解决方案,但它会有所帮助。

      要卸载项目,请右键单击它并选择“卸载项目”。

      【讨论】:

        猜你喜欢
        • 2012-07-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-01-20
        • 2016-07-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多