我正在尝试调查一个性能问题,即当我们的某个服务器上运行64位时,应用程序运行缓慢,而它在同一台机器上运行32位或在其他任何地方运行64位。
我已经看到这可能与正在使用的JIT编译器有关。有没有办法让我知道哪个JIT编译器用于运行我的应用程序?我想看看它在服务器上是否与64位版本工作正常的其他计算机不同。
答案 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 :(得分: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将程序集预编译为本机映像。