如何在VS2012中提高CodeContract重写器的性能?

时间:2013-04-17 19:00:18

标签: visual-studio-2012 code-contracts

我们有一个包含60个项目的中型VisualStudio解决方案。每个项目都包含代码合同。由于我们使用Contract.Requires<T>作为前提条件,因此我们需要在编译后重写程序集。

装配模式是'标准合同要求',运行时检查设置为'完整',我们设置了'断开合同失败'。合同参考组件设置为“构建”。

从VS2010更改为VS2012(安装前已卸载VS2010)后,我们的解决方案将构建为 1m 30s 。安装CodeContracts安装包后,构建时间增加到 5m 30s (因为二进制重写器现在正在重写程序集)。

这比在VS2010中构建解决方案要长很多,VS2010需要大约3米才能进行完全重建。

是否有人经历过类似的放缓或了解情况如何改善?

我们已经尝试禁用合同引用程序集的构建,但这并没有改变任何内容。

3 个答案:

答案 0 :(得分:0)

我们有一个解决方案,其中大多数都运行着重写器的90多个项目。在HP z420上,通过并行构建,我可以在大约1分40秒内构建解决方案。重写器确实为每个项目添加2-10秒,具体取决于要重写的dll的大小。这是最新的1.5.60409.11版本。

答案 1 :(得分:0)

我注意到静态检查器严重减速,但不确定这是否适用于此。我不是积极的,但我认为他们最近改变了缓存的工作原理。我认为它默认使用基于文件的缓存,但不再具有该选项。在项目的CC设置中,有一个选项可指定用于缓存的SQL实例。我花了一段时间才能做到正确但我在我的机器上使用了SQL Express实例。我选中了“缓存结果”,并将“SQL Server”设置为.\SQLEXPRESS。当工具运行时,您应该在输出窗口不工作时看到有关缓存的消息。

答案 2 :(得分:0)

当我开始一个新的解决方案时,我要做的第一件事就是创建一个新的解决方案配置:

  1. 调试
  2. Debug CC
  3. 推出
  4. 然后我只启用Debug CC上的Code Contracts。这允许我在调试模式下快速编译,并在接近提交时切换到Code Contracts构建。