我正在调查一个应用程序在我们的某台服务器上以64位运行时运行缓慢的性能问题,而在同一台机器上以32位运行或在其他任何地方以64位运行时则运行快速。
我发现这可能与使用的JIT编译器有关。是否有办法告诉我哪个JIT编译器用于运行我的应用程序?我想看看它在服务器上是否与在其他计算机上正常运行64位版本的情况不同。
我正在调查一个应用程序在我们的某台服务器上以64位运行时运行缓慢的性能问题,而在同一台机器上以32位运行或在其他任何地方以64位运行时则运行快速。
我发现这可能与使用的JIT编译器有关。是否有办法告诉我哪个JIT编译器用于运行我的应用程序?我想看看它在服务器上是否与在其他计算机上正常运行64位版本的情况不同。
JIT版本
您可以按照汉斯的步骤验证RyuJIT是否加载到您的应用程序中。[2]
使用调试器确保您有新版本。首先,使用资源管理器查看运行时目录,在导航到C:\Windows\Microsoft.NET\Framework64\v4.0.30319。您会发现两个即时编译器,clrjit.dll是基于Ryujit项目的新即时编译器,而compatjit.dll是传统的x64即时编译器。
项目 > 属性 > 调试 > 选中“启用本机代码调试”选项。使用生成选项卡,确保已删除强制使用即时编译器的操作,“偏好32位”选项必须未选中,“平台目标”必须设置为AnyCPU。使用应用程序选项卡选择框架目标。
使用调试 > 逐步执行开始调试。调试 > 窗口 > 模块显示已加载模块列表。在该列表中找回即时编译器DLL,单击“名称”列标题以按名称排序。如果看到compatjit.dll,则正在使用传统即时编译器。请注意,您始终会看到clrjit.dll,当使用传统即时编译器时,它们都会加载。
[2] https://dev59.com/WlwZ5IYBdhLWcg3wYfZu#31534544
[2] https://dev59.com/WlwZ5IYBdhLWcg3wYfZu#31534544JIT 架构
您可以通过检查运行应用程序是否为 64 位进程来确定使用的 JIT 架构。
Environment.Is64BitProcess
https://msdn.microsoft.com/en-us/library/system.environment.is64bitprocess.aspx
这个属性在64位和32位的mscorlib中分别作为直接的true/false返回实现。[1]