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