【发布时间】:2015-10-20 22:11:14
【问题描述】:
我最近刚刚下载并安装了 Visual Studio Professional 2015 (14.0.23107.0)。当我第一次打开我们的解决方案(28 个项目)并执行构建 -> 重建解决方案时,我的开发机器完全爬行。 CPU 已达到 100% 的最大值,并且构建从未完成 - 即使超过 10 分钟。
我打开 Windows 任务管理器并注意到: > 10 个 VBCSCompiler.exe 任务正在运行。合并后,这些任务发送的 CPU > 90%。
知道为什么会有这么多任务在运行吗?有什么办法可以阻止这种情况发生?
这是我能找到的最接近遇到同样问题的其他人的东西:https://github.com/dotnet/roslyn/issues/2790
更新 (8/7)
-Hans Passant,好主意。我的经理向我提供了此版本 (14.0.23107.0)。这是“正式发布”的正确版本吗?我没有故意安装任何 Visual Studio 2015 的每个发布版本。我认为周围没有任何测试版。
-Kyle Trauberman,我对 Visual Studio 上下文中的环境变量不太熟悉;但是,我在 VS(和 MSBuild)命令提示符窗口中天真地运行了 set DisableRosyln=true。这似乎没有任何影响。 VBCSCompiler.exe 会在重启 VS2015 后立即备份。
我修复了我的 VS2015 安装并执行了重新启动。这没有帮助。
更新第 2 部分 (8/7) -Hans Passant,写得非常令人印象深刻!!虽然这次没有出现问题,但我看了一下您描述的内容:
就使用 VBCSCompiler.exe 加载的模块而言,这是我所拥有的:
有趣的是,我们的 .NET 核心程序集有不同的版本。你在 4.06.79,而我在 4.06.81。
我的“客户端 dll”(位于 C:\Program Files (x86)\MSBuild\14.0\Bin\Microsoft.Build.Tasks.CodeAnalysis.dll)与您的版本和时间戳相同:
奇怪的是,当我查看 ILSpy 中的代码时,我看到了一些稍微不同的东西——也许是优化?
private static NamedPipeClientStream TryAllProcesses(string pipeName, int timeoutMs, CancellationToken cancellationToken, out string newPipeName)
{
string str = pipeName;
int num = 1;
while (File.Exists(string.Format("\\\\.\\pipe\\{0}", pipeName)))
{
NamedPipeClientStream result;
if ((result = BuildClient.TryConnectToProcess(pipeName, timeoutMs, cancellationToken)) != null)
{
newPipeName = pipeName;
return result;
}
pipeName = str + "." + num.ToString(CultureInfo.InvariantCulture);
num++;
}
newPipeName = pipeName;
return null;
}
**让我与您讨论传递给 VBCSCompiler.exe 实例的特定 pipname 参数。我将不得不等到它再次发生。
【问题讨论】:
-
可能希望将标签从 visual-studio 更改为特别是 visual-studio-2015,因为它特定于该版本。这样可能会得到更熟悉此事的人的更多关注。
-
我遇到了同样的问题:22 个 VBCSCompiler.exe 进程同时运行,使用 100% CPU(16 个内核)和每个 300MB 的 RAM。我注意到当我更改项目的 mercurial 分支并让 VS 重新加载解决方案然后构建时会发生这种情况。此时我必须手动终止进程或注销。
-
@gigi 有时我也会遇到同样的情况。你使用 ReSharper 吗?
-
@splattne 是的,我愿意。最新版本可用。你认为这可能是原因吗?
-
补充说我也遇到过这个问题,但我不使用 Resharper
标签: c# .net visual-studio-2015 roslyn