14

安装 Visual Studio 2015 RC1 后,我加载了一个旧的 ASP.NET 项目并将 .NET 版本更改为 4.6。该项目运行良好,但网站仍然像往常一样缓慢加载。我原以为 RyuJIT 会加入,但显然不是。

我看过这个关于 RyuJIT 的线程,我看不到任何 RyuJIT 的痕迹,其中描述的任何方法。

空的控制台项目也会出现同样的问题。我在输出窗口、模块窗口或正在运行的 Windows 任务中看不到 Ryujit。

因此,要么像以前的预览版那样无法检测到 RyuJIT,要么它没有运行。无论哪种方式,我都被困住了。

我如何验证 RyuJIT 是否在 VS 2015 中运行,如果不是,我该怎么做才能使其运行?

4

3 回答 3

6

干得好

安装后,有两种方法可以开启 RyuJIT。如果您只想为一个应用程序启用 RyuJIT,请设置一个环境变量:COMPLUS_AltJit=*。如果要为整台机器启用 RyuJIT,请将注册表项 HKLM\SOFTWARE\Microsoft.NETFramework\AltJit 设置为字符串“*”。这两种方法都会导致 64 位 CLR 使用 RyuJIT 而不是 JIT64。两者都是临时设置——安装 RyuJIT 不会对您的机器进行任何永久性更改(除了将 RyuJIT 文件安装在一个目录中,也就是说。)

取自.NET Framework 4.6 - 使用 RyuJIT 进行测试

但它应该默认激活

.NET Framework 4.6 包括用于 64 位进程的新即时 (JIT) 编译器,称为 RyuJIT。默认情况下启用。它仍然是预览版,因此您可能会发现尚未修复的问题。

取自.NET Framework 4.6 - 使用 RyuJIT 进行测试

出于测试目的,如果您遇到任何 RyuJIT 异常,您可以使用 app.config 中的设置将其关闭。这使用较旧的 JIT64。

<configuration>
 <runtime>
  <useLegacyJit enabled="1">
 </runtime>
</configuration>

但是,RyuJIT CTP5 目前不能在 Visual Studio "14" CTP4 上运行。无论如何你都不需要它,因为 RyuJIT 在 Visual Studio "14" CTP4 上默认启用。:) (Visual Studio "14" CTP4 中的 RyuJIT 版本比这个 CTP 稍旧,但相差不大。)

取自RyuJIT CTP5:更接近发货,并提供更好的 SIMD 支持

我找到了一篇博客文章来确定运行时使用的 JIT,但它考虑了 den JIT64 编译器中的一个已知错误。示例代码发布在这里。我不确定这是否是确定它的可靠方法。

于 2015-05-12T10:13:06.850 回答
6

首先,转到项目的设置,调试选项卡并确保已启用本机代码调试。这使您能够在 Visual Studio 的“模块”窗口中查看本机可执行文件和托管可执行文件。

现在在 Debug 或 Release 模式下运行程序并打开 Modules 窗口。您将看到以下两种情况之一:

  • 要么只加载 clrjit.dll,这意味着 RyuJIT 被用于编译所有托管代码。
  • 或者 clrjit.dll 和 compatjit.dll 都已加载,这意味着旧版 JIT64 编译器正在用于编译托管代码,而其他可执行文件中的托管代码可能使用任一编译器。

compatjit.dll 在启用回退机制时加载。否则,它不会加载。

请注意,如果您安装了 .NET 4.6(又名 .NET 2015),则默认情况下将使用 RyuJIT,即使您针对的是较旧版本的框架。

关于 RyuJIT 与 JIT64。JIT64 本身生成的代码目前比 RyuJIT 生成的代码要快。所以不要指望这方面的性能改进。另一方面,编译时间各不相同。据微软称,RyuJIT 的编译时间可以比 JIT64 快 30%,15%。所以也不要指望这方面的性能改进。

但是,当 .NET 2015 发布时,情况可能会有所改变。

笔记

如果目标平台是“Any CPU”,则必须取消选中 Build 选项卡中的“Prefer 32-bit”复选框。否则,将使用 x86 JIT。

于 2015-05-17T21:25:50.470 回答
0

RyuJIT 会在您编译代码时自动激活,这只是一个在 64 位模式下运行的编译器,可以访问 RAM 以将编译速度提高 30%,并且在 JIT 编译器中花费的时间只是启动时间的一个组成部分,因此应用程序不会不要仅仅因为 JIT 快一倍而启动快一倍。

您可以检查您当前的 ram 内存状态和运行进程,如果可用内存足够,那么它必须运行得更快,否则需要考虑内存分配的时间。

于 2015-05-13T07:26:00.283 回答