【问题标题】:Measuring JIT time of a .NET application测量 .NET 应用程序的 JIT 时间
【发布时间】:2011-04-24 04:57:44
【问题描述】:

我知道您可以使用 NGen 制作您的 .NET 应用程序的本机预编译映像。

但是您如何衡量您的应用程序在 JIT 中花费了多少时间?哪些分析工具将对此进行测量?有没有免费的工具可以做到这一点?我想知道在执行此操作之前要节省多少时间。

【问题讨论】:

    标签: .net jit ngen


    【解决方案1】:

    很遗憾,您无法获得“JIT 中的绝对时间”统计数据。 CLR 确实公开了它定期更新的“% Time in Jit”性能计数器,但它仅在它选择采样时准确。

    您可以通过 Windows 性能监视器工具或通过 RedGate 的 ANTS Profiler 等工具轻松访问此性能计数器 - 这是我第一次接触它的方式。如果您需要对其进行编程访问,可以使用 WMI 或 .NET PerformanceCounter 类。

    【讨论】:

    • 这看起来不是一个很有帮助的计数器。当发生大量 JIT 时,它几乎不会移动,但当没有额外的字节被 JIT 编辑时,它会在随机时间飙升至 100%。 (就像重新打开一个关闭的窗口)
    • 这不是我的经验。根据他们的采样模式,它的粒度非常粗,并且经常摆动,但它始终与包括 JIT 编译在内的时期相对应。
    • 它似乎与那些时代大致相关。但这并不能告诉我使用 NGen 可以获得多少收益。
    【解决方案2】:

    This article about measuring JIT impact 非常有帮助。基本上,您会在热启动场景中使用 NGen。冷启动时间通常由将 DLL 加载到内存中来控制。 JIT 编译对热启动的影响更大。

    关于如何安装 xperf 有点模糊:基本上你想下载 Windows 7 .NET 4 SDK 并确保选择 Performance Toolkit。然后以管理员身份打开 VS 2010 命令提示符,切换到您要配置的程序的目录并按照文章中的命令进行操作。

    它的基本要点是,通过 xperf 捕获,您可以深入了解您的进程并查看在 clrjit.dll 中花费了多少时间。在我的例子中,30% 的 CPU 时间都花在了热启动上。

    【讨论】:

    • 我不确定我是否理解或同意您的结论。如果您对程序集进行了 NGen 处理,则要从磁盘加载的图像会大得多(这可能会减慢冷启动时间)。如果您没有对您的程序集进行 NGen,则图像会更小,但 JIT 会发挥作用,这也需要时间。如果您是 NGen,则没有 JIT(除非您加载尚未 NGen 的程序集)。
    • 我想我们在这里说的是同样的事情。 NGen 有助于热启动而不是冷启动。
    猜你喜欢
    • 2011-01-04
    • 2012-09-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多