解释 MSBuild 性能摘要输出

Posted

技术标签:

【中文标题】解释 MSBuild 性能摘要输出【英文标题】:Interpreting MSBuild Performance Summary Output 【发布时间】:2010-07-28 14:39:43 【问题描述】:

我正在尝试了解 MSBuild 的一些性能摘要输出。结果如下所示:

Target Performance Summary:
        0 ms  PrepareForRun                             74 calls
        0 ms  Compile                                   74 calls
        ...
        ...
        ...
        ...
    15173 ms  ResolveProjectReferences                  74 calls
    29607 ms  Build                                     75 calls

Task Performance Summary:
        2 ms  CreateCSharpManifestResourceName           6 calls
        2 ms  ResolveKeySource                           1 calls
    ...
    ...
    ...
    ...
     3623 ms  Copy                                     511 calls
     7468 ms  ResolveAssemblyReference                  74 calls
    11234 ms  Exec                                      12 calls
    48600 ms  MSBuild                                  210 calls

Build succeeded.
    0 Warning(s)
    0 Error(s)

Time Elapsed 00:00:29.60

为什么 MSBuild 的总时间超过了总运行时间?实际上,运行此构建的实际秒表时间约为 29 秒。我在网上看到的这些摘要的任何示例都表明,总任务和目标时间是相同的。

【问题讨论】:

ResolveAssemblyReferences(RAR) 和 ResolveCOMReferences (RCR) 通常花费的时间最多。 @RitchMelton 实际上,他们没有。我已经添加了对这些目标的跟踪(通过直接修改 Microsoft 目标),它们显示 RAR 花费的时间很少。整个时间报告对我来说似乎被打破了...... 他们曾经。显然如此。如果它神奇地改变了,我会感到惊讶。 为什么不做一个诊断? 它的工作原理是一样的。说它不是只是坏信息。 【参考方案1】:

MSBuild 和 CallTarget 任务调用其他目标(以及其他任务)。在这些任务中花费的时间也计入 MSBuild 和 CAllTarget 任务。一个错误,真的。

因此,在读取此数据时,请始终忽略这两个任务。其他任务的总和应该比总构建时间少一点。

【讨论】:

以上是关于解释 MSBuild 性能摘要输出的主要内容,如果未能解决你的问题,请参考以下文章

msbuild 自定义日志输出

禁用代码分析输出 MSBuild

命令行中的 Msbuild 不输出 Csc 警告和输出

MSBuild:如何将文件复制到由执行命令的输出确定的 DestinationFolder?

VS/MSBUILD:复制子项目的输出文件,不添加对exe的引用

在 MSBuild 中确定 ProjectReference 的输出而不触发冗余重建