【问题标题】:MSBUILD (VS2010) very slow on some machinesMSBUILD(VS2010)在某些机器上非常慢
【发布时间】:2011-07-14 23:38:32
【问题描述】:

我有一个很奇怪的。

我们的开发部门有大约十几台 PC,它们都遇到相同的问题: 使用 msbuild4.0 (VS2010) 的命令行构建比应该的要慢得多。比预期慢 4 到 5 倍。

所有机器都是 HP z400 工作站(四核 Xeon+超线程,2.4 GHz,6GB RAM) 在 Win7 X64 上运行 Windows 7 Pro 64 位或 HP Elitebook 笔记本电脑(Core-i7 4GB RAM)。 如果我选择其中一个预装了原版的 Win7,安装 VS2010 并进行构建,它们的速度与预期的一样快。如果我用我们公司的标准软件映像安装它们,它们在同一个 VS 项目上会慢 4 到 5 倍。

联想笔记本电脑 (Core-i5) 或台式机 (Core-i7) 上的相同公司软件映像显示公司映像与工厂预装的 Win7 之间没有可测量的差异。 更奇怪的是:如果我在有问题的 HP 系统上安装带有 Win7 映像的 VirtualBox,那么虚拟机就没有问题。

我尝试过的每个基准测试工具都显示公司图像和预装的 Win7 之间没有可测量的差异。只有 msbuild 受到影响,并且仅在公司镜像上运行 Win7 的 HP 机器上受到影响。

在您问之前:我已禁用公司映像中的所有软件/后台进程,但这没有任何区别。这显然不是在后台运行的东西以某种方式与 msbuild 交互。我最好的猜测是,在 HP 硬件上,某些设置会发生更改,从而影响 msbuild。这不会发生在其他硬件上。 (并且根本不使用/执行 VS2010 GUI。我知道如果两者都尝试访问相同的解决方案/文件,这可以与 msbuild 交互。防病毒也没有任何区别。)

有人知道什么可能会影响 msbuild 变慢吗? 欢迎任何建议,无论多么牵强。

【问题讨论】:

  • 外星人。另外,你太离题了,让我的牙齿发痒。
  • 尝试将 MSBuild 输出详细程度更改为诊断 - 它为您提供有关构建期间发生的情况的大量信息。您可能从中获得更多信息。
  • 检查杀毒的性能影响时,关闭是不够的。你必须卸载它。
  • @Ben - 你为什么要卸载。我会假设如果它在关闭时不扫描,那么它与不存在一样吗?
  • @PeterMularien 这不是真正的错误。只是一个愚蠢的实现,在多核机器上执行得非常糟糕。适用于所有 V9 版本和(我被告知)也适用于早期版本。它在 V10 及更高版本中已修复。 (据我所知,糟糕的性能仍然存在,但它只在需要时被调用。不再在每个证书检查中。在我们的例子中,仅用于电子邮件证书检查,而 Outlook 几乎是单一威胁的,所以没有人再注意到了。 )

标签: performance visual-studio-2010 msbuild


【解决方案1】:

发现问题后自己回答。 有问题的计算机都安装了“Entrust Entelligent Security Provider”软件。 (我们公司用于处理加密邮件的证书管理器。)

.NET4(其中编写了 VS2010)和 .NET4 代码的编译需要大量的证书检查,并且该软件(在此过程中被调用)显然在多核 PC 上存在问题。内核越多,事情变得越慢。

core-i5 系统也有问题,但没有那么严重。它们仍然可用。 i7 和 Xeon 系统(8 核)速度变慢,几乎无法使用。

很遗憾,我无法摆脱这个 Entrust 软件。它是公司强制软件套件的一部分。 我只是希望供应商对此有解决方案。

编辑:Entrust Entelligence 版本 10 解决了问题。默认情况下,它不再将自己设置为系统中的第一个证书处理程序。
在 v9 上,需要手动编辑注册表才能将 MS 处理程序放回默认位置。
这是真正的问题:每个证书检查都首先通过 Entrust DLL,该 DLL 将所有内容推入队列,该队列仅由单线程/CPU 清空。然后它发现它不应该处理此证书并将其交给 Microsoft 处理程序。

【讨论】:

  • 很好的答案。对于那些好奇的人,我更改为应用此“修复”的注册表项是HKLM\SOFTWARE\Wow6432Node\Microsoft\Cryptography\Defaults\Provider Types\Type 001。将Name 的值更改为Microsoft Enhanced Cryptographic Provider v1.0。 在退出 regedit 之前尝试启动 VS2010 -- 如果您在此处犯了错误,您可能无法启动某些应用程序。
  • 伟大的补充彼得。我应该在当天自己提供这个。在关闭 regedit 之前尝试 VS2010 的提示也是一个好主意。
【解决方案2】:

诊断报告将详细显示 MSBuild 的工作方式,但并不总是有助于诊断性能问题。尝试运行正常构建,在 msbuild 命令行中添加以下附加选项:

/ds /clp:performancesummary

这将输出有关节点使用情况的诊断摘要,还会在构建的控制台输出末尾添加详细的性能摘要,显示每个任务运行了多长时间。如果您使用文件记录器,您可以在文件记录器参数 (/flp:...) 的末尾添加“;performancesummary”选项。

要注意的另一件事是减少 AssemblySearchPaths 属性以仅使用您在项目中使用的路径,这是我见过的某些构建出现性能问题的原因。只需在 Microsoft.Common.targets 中搜索,在所有项目使用的标准导入中重新定义它(您确实有其中之一,对吧:)并在导入标准文件之前重新定义它,删除任何 {.. .} 您不使用的物品。

【讨论】:

  • 实际上,diag 完成了所有这些工作,还显示了正在搜索 ResolveAssemlbyReferences 的目录。并不是说您的选择不好,只是没有显示我想知道的所有信息。
【解决方案3】:

从命令行运行 MSBuild,详细程度设置为 diag:

MSBuild mysolution.sln /v:diag

这将生成一个列表,其中包含每个任务花费的时间量。这应该会给你一些信息。

【讨论】:

  • 试过了:主要是.Net 4的组装处理,但是为什么这些HP机器上的不同,而几乎相同的联想系统却没有呢?这些机器上的软件安装(除了一些驱动程序)完全相同。
  • 您的意思是 ResolveAssemblyReferences 任务?它在搜索什么路径?
  • @Rich:只是 .NET4 SDK 的本地路径和构建本身的应用程序特定路径。这些在所有涉及的 PC 上都是相同的。
【解决方案4】:

首先我假设您没有做任何愚蠢的事情,例如在网络位置或映射驱动器上构建,或重定向“文档”文件夹?

下一步是使用任务管理器查看哪些进程正在减慢您的速度。处理器使用率是否为 100%?哪些进程处于活动状态?是否分页很多(查看“页面错误增量”)?哪些进程?

我不得不说这听起来像是防病毒软件。您应该从防病毒读写扫描中排除 OBJ、LIB、ILK、PDB 和类似文件类型。

我知道您说过“防病毒软件没有任何作用”,但您尚未确认您已尝试完全关闭它。

还要查看搜索索引器、连续备份或可能响应构建活动的类似过程。

【讨论】:

  • 嗨 Ben:我们专门创建了一个本地构建测试场景。系统有充足的 RAM(6G,使用中大约 1.5)。 CPU 负载不超过 25%(在具有超线程的四核上)。我们确实使用 msbuild /M。
  • 关于防病毒软件,见上文:我们测试了有无。没有区别:无论如何,常规开发文件扩展名都被排除在外。
  • 分页? IO 读/写?为确保它不使用网络资源做任何事情,请尝试拔下它...
  • 我的构建时间从 1 个解决方案的 15 个项目的 3-5 秒缩短到 3 分钟。感谢这里的提示,因为 Microsoft Security Essentials 的实时保护是我的罪魁祸首。不知道为什么自从安装了 MSE 后它突然变慢了,但是在实时保护列表中添加一个排除项为我解决了这个问题。回到 3-5 秒。
  • @BryanMiglioririsi - 同样的事情也适用于我。问题是,我只能通过取消选中“监视计算机上的文件和程序活动”选项来恢复速度。到目前为止,排除位置、文件类型甚至进程对我不起作用。
猜你喜欢
  • 2015-08-22
  • 1970-01-01
  • 1970-01-01
  • 2015-06-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多