测量 .NET 应用程序的 JIT 时间

问题描述 投票:0回答:3

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

但是如何衡量应用程序在 JIT 上花费了多少时间?什么分析工具可以衡量这一点?有没有免费的工具可以做到这一点?我想知道在这样做之前可以节省多少时间。

.net jit ngen
3个回答
4
投票

不幸的是,您无法获得“JIT 中的绝对时间”统计数据。 CLR 确实公开了一个“% Time in Jit”性能计数器,它会定期更新,但它的准确性取决于它选择的采样。

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


3
投票

这篇关于衡量 JIT 影响的文章非常有帮助。基本上,您会使用 NGen 进行热启动场景。冷启动时间通常主要是将 DLL 加载到内存中。 JIT 编译对热启动的影响更大。

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

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


0
投票

从 NET6.0 开始,您可以使用

System.Runtime.JitInfo
静态类来获取概述:

https://learn.microsoft.com/en-us/dotnet/api/system.runtime.jitinfo?view=net-6.0

示例:

Console.WriteLine($"Time: {JitInfo.GetCompilationTime(false)}");
Console.WriteLine($"ILBytes: {JitInfo.GetCompiledILBytes(false)}");
Console.WriteLine($"MethodCount: {JitInfo.GetCompiledMethodCount(false)}");

true
传递给这些方法会返回当前线程的值(而不是全局值)。

© www.soinside.com 2019 - 2024. All rights reserved.