【发布时间】: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) 时,我注意到对项目中每个文件和文件夹以及项目依赖项的 CreateFile、QueryDirectory 和 CloseFile 的调用。这似乎与查看时间线时的延迟有关。
如何减少从我在 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