哪个JIT运行我的应用程序

本文关键字:应用程序 我的 运行 JIT 哪个 | 更新日期: 2023-09-27 18:11:29

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

我已经看到这可能与所使用的JIT编译器有关。是否有一种方法可以告诉我正在使用哪个JIT编译器来运行我的应用程序?我想看看它在服务器上是否与其他64位版本运行良好的计算机上不同。

哪个JIT运行我的应用程序

JIT版本

您可以按照Hans的步骤来验证RyuJIT是否被加载到您的应用程序中。[2]

使用调试器确保您有新版本。首先用资源管理器查看运行时目录,导航到C:'Windows'Microsoft.NET'Framework64'v4.0.30319。你会在那里发现两个抖动,cljit .dll是基于Ryujit项目的新抖动,而compatjit.dll是遗留的x64抖动。

项目比;性能比;调试比;勾选"启用本机代码调试选项"。使用Build选项卡,确保你已经删除了抖动强迫,"首选32位";选项必须被取消,"平台目标"必须设置为AnyCPU。并使用Application选项卡选择框架目标。

使用调试>Step Into开始调试。调试比;窗户比;Modules显示加载的模块列表。在列表中找到抖动dll,单击"名称"。按名称排序的列标头。如果你看到的是jre .dll,那么你使用的是旧的抖动。请注意,您总是会看到clrjit.dll,它们都是在使用遗留抖动时加载的。

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

JIT架构/strong>

您可以通过检查正在运行的应用程序是否是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

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

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