【发布时间】:2011-04-24 04:57:44
【问题描述】:
我知道您可以使用 NGen 制作您的 .NET 应用程序的本机预编译映像。
但是您如何衡量您的应用程序在 JIT 中花费了多少时间?哪些分析工具将对此进行测量?有没有免费的工具可以做到这一点?我想知道在执行此操作之前要节省多少时间。
【问题讨论】:
我知道您可以使用 NGen 制作您的 .NET 应用程序的本机预编译映像。
但是您如何衡量您的应用程序在 JIT 中花费了多少时间?哪些分析工具将对此进行测量?有没有免费的工具可以做到这一点?我想知道在执行此操作之前要节省多少时间。
【问题讨论】:
很遗憾,您无法获得“JIT 中的绝对时间”统计数据。 CLR 确实公开了它定期更新的“% Time in Jit”性能计数器,但它仅在它选择采样时准确。
您可以通过 Windows 性能监视器工具或通过 RedGate 的 ANTS Profiler 等工具轻松访问此性能计数器 - 这是我第一次接触它的方式。如果您需要对其进行编程访问,可以使用 WMI 或 .NET PerformanceCounter 类。
【讨论】:
This article about measuring JIT impact 非常有帮助。基本上,您会在热启动场景中使用 NGen。冷启动时间通常由将 DLL 加载到内存中来控制。 JIT 编译对热启动的影响更大。
关于如何安装 xperf 有点模糊:基本上你想下载 Windows 7 .NET 4 SDK 并确保选择 Performance Toolkit。然后以管理员身份打开 VS 2010 命令提示符,切换到您要配置的程序的目录并按照文章中的命令进行操作。
它的基本要点是,通过 xperf 捕获,您可以深入了解您的进程并查看在 clrjit.dll 中花费了多少时间。在我的例子中,30% 的 CPU 时间都花在了热启动上。
【讨论】: