哪个JIT正在运行我的应用程序

时间:2016-10-03 14:57:32

标签: c# performance

我正在尝试调查一个性能问题,即当我们的某个服务器上运行64位时,应用程序运行缓慢,而它在同一台机器上运行32位或在其他任何地方运行64位。

我已经看到这可能与正在使用的JIT编译器有关。有没有办法让我知道哪个JIT编译器用于运行我的应用程序?我想看看它在服务器上是否与64位版本工作正常的其他计算机不同。

2 个答案:

答案 0 :(得分:1)

JIT版本

你可以关注汉斯'验证RyuJIT是否已加载到您的应用程序中的步骤。 [2]

  

使用调试器确保您拥有新版本。首先看一下Explorer的运行时目录,导航到C:\ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319。你会发现那里的两个紧张,clrjit.dll是基于Ryujit项目的新抖动,而compatjit.dll是传统的x64抖动。

     

项目>属性>调试>勾选"启用本机代码调试选项"。使用Build选项卡确保您已经删除了抖动强制,"首选32位"选项必须是未选中的,"平台目标"必须设置为AnyCPU。并使用“应用程序”选项卡选择框架目标。

     

使用调试> Step Into开始调试。调试> Windows>模块显示已加载模块的列表。找到该列表中的抖动DLL,单击" Name"列标题按名称排序。如果你看到compatjit.dll,那么你正在使用传统的抖动。请注意,您始终会看到clrjit.dll,它们都会在使用旧版抖动时加载。

[2] https://stackoverflow.com/a/31534544/102351

JIT架构

您可以通过检查正在运行的应用程序是否为64位进程来确定所使用的JIT的体系结构。

Environment.Is64BitProcess

https://msdn.microsoft.com/en-us/library/system.environment.is64bitprocess.aspx

此属性分别在64位和32位版本的mscorlib中实现为直接true / false返回。 [1]

[1] https://stackoverflow.com/a/1913908

答案 1 :(得分:1)

使用JIT性能计数器(https://msdn.microsoft.com/en-us/library/w8f5kw2e(v=vs.110).aspx#jit)来监视代码何时被jitted。

您可以使用ngen(https://msdn.microsoft.com/en-us/library/6t9t5wcf(v=vs.110).aspx)通过消除对JIT代码的需要来改善应用程序启动时间 - ngen将程序集预编译为本机映像。