gpt4 book ai didi

.net - 代码分析改进

转载 作者:行者123 更新时间:2023-12-03 23:22:13 25 4
gpt4 key购买 nike

静态 CA 使解决方案构建速度变慢。在我的情况下,比没有 CA 慢 2 倍。我们可以禁用它,但失去它的权力是一个糟糕的决定。
所以,我们能做些什么?
首先让我们看看CA是如何工作的。
您构建解决方案。在 msbuild 编译目标 fxcopcmd.exe 之后的每个项目构建中,都会使用应分析的程序集的路径调用。 fxcopcmd。生成 VS 使用的 CA xml 日志(或者可能是输出流)。 fxcopcmd.exe 加载程序集(快速)并同步分析它,因此只加载了一个 CPU,而 3 个(在我的情况下)什么都不做。只有在 CA 完成后,才会构建项目依赖链中的下一个项目。
所以 CA 的弱点是我们可以改进它 - 强制它并行工作以使用所有 CPU。
我看到这样的解决方案
要制作从 MSBUILD 获取参数的假 fxcopcmd.exe,请记住它并立即向 msbuild 报告一切正常并且没有错误(通过 CA xml.log,或成功的文件,或者可能是流..)。所以 MSBUILD 将构建下一个项目,届时我们将使用保存的参数调用真正的 fxcopcmd.exe...很少有进程会加载所有 CPU。真正的 fxcopcmd.exe 完成后,我们可以调用我们的 MSBUILD 目标,该目标将只调用来自 microsoft.common.targtets 的 CA 目标而无需编译,我们的假 fxcopcmd.exe 将立即报告结果(此时 CA 已完成,我们有日志)到 MSBUILD-VS。
你怎么认为?这会加速CA吗?
为什么微软不做这样的员工,在CA只用一个CPU?

最佳答案

我曾经问过 similar question on Connect and got a reply directly from the team .在 2012 年的 ALM 峰会上,我讨论了这个话题,原因有很多(排名不分先后)

  • 一旦 Project Roslyn 集成到 Visual Studio 产品中,代码分析引擎很可能会被替换。 Roslyn 将提供实时分析(如 Resharper)和“修复”发现的问题的能力。
  • 该引擎非常占用 CPU,并且已经使用了多个 CPU,因此运行多个实例可能不会像您怀疑的那样对您有所帮助。此外,fxcop 可能是 I/O 密集型的(加载程序集、pdb 和其他文件),当您同时加载多个实例时,这种情况只会变得更糟。
  • 构建引擎需要访问构建输出。用于引用,也用于其他任务。因此,它需要知道任务完成后文件不再使用。例如,当您添加一个将多个程序集合并在一起并随后删除旧程序集的任务时,它需要访问这些文件。简单的移动/打包/等操作也是如此。
  • 在发现代码分析问题(设置为 level=error)时尽早使构建失败的能力将不起作用,因为您只是在最后收集结果。可能导致您构建所有内容,却发现您无法使用最终结果。

  • 正如您在 this MSDN forum post 中看到的那样,Fxcop 本身已经使用了多个线程,并且(至少在 2010 附带的规则中)已经存在一些并发问题,导致我们在某些情况下关闭 Fxcop 的并发。如果您希望 fxcop 使用更多(或更少)线程,您可以编辑 fxcopcmd.exe.config文件:
     <FxCopEngineSettings Version="1.32">
    <Engines>
    <Engine Name="Introspection" Enabled="True">
    <!-- Change this number to use more (or fewer) threads -->
    <Threading Count="1" />
    <EnableFlowAnalysis>True</EnableFlowAnalysis>
    </Engine>
    </Engines>
    </FxCopEngineSettings>

    虽然论坛帖子提到了 Visual Studio 2008,但我也应用它来解决 2010 的问题。

    使 FxCop 更高效的一个更简单的方法是在所有项目编译后调用一次。这将导致它只加载所有符号和引用的程序集一次,并允许引擎最大限度地利用并行性。当您有一个混合多个目标平台和 cpu 的解决方案时,或者当您想为不同的项目使用不同的 .rules 文件时,这也存在一些问题。

    或者您可以做与我相同的事情,即为您的本地解决方案配置 FxCop,但不要将其设置为在每个构建上运行。然后在 Team Foundation Server Team Build(或您可能使用的任何其他构建服务器)中,覆盖 FxCop 的配置以运行“始终”。这样,您在构建本地解决方案时不会影响性能。它仍然允许您在本地(从分析菜单项)为整个解决方案运行代码分析,并且自动构建可以防止您 checkin 有问题的代码。

    关于.net - 代码分析改进,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16759059/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com