2015-05-04 174 views
14

安裝Visual Studio 2015 RC1後,我加載了一箇舊的ASP.NET項目,並將.NET版本更改爲4.6。該項目工作正常,但網站仍然加載速度一如既往緩慢。我期待RyuJIT能夠踢球,但顯然不是。在Visual Studio 2015 RC中啓用RyuJIT

我看了一下關於RyuJIT的this thread,我看不到任何RyuJIT的痕跡。

空控制檯項目也會出現同樣的問題。我無法在輸出窗口,模塊窗口或運行窗口任務中看到Ryujit。

因此,RyuJIT無法檢測到,因爲它以前用於早期預覽,或者它沒有運行。無論哪種方式,我卡住了。

我該如何驗證RyuJIT是否在VS 2015中運行,並且我需要做些什麼才能讓它運行以防萬一它不在?

+0

你確實意識到RyuJIT只有64位?也許你運行的是32位? – leppie

+0

@leppie:我正在使用Windows 8.1 x64。在控制檯項目中。 「首選32位」複選框未選中,因此我假定它使用64位。在ASP.NET項目中,該複選框呈灰色,不確定這意味着什麼。 –

+0

沒有選擇*不*使用它在.NET 4.6中,它總是用於jit 64位代碼。不*期望提高速度,這不是項目的目標。 –

回答

6

首先,進入該項目的設置,調試選項卡,並確保本機代碼的調試啓用。這使您能夠在Visual Studio的「模塊」窗口中查看本機以及託管的可執行文件。

現在在調試運行程序或發行模式,並打開模塊窗口。你會看到以下兩件事之一:

  • 要麼只有clrjit.dll被加載,這意味着RyuJIT被用於編譯所有託管代碼。
  • 或者同時加載clrjit.dll和compatjit.dll,這意味着傳統JIT64編譯器正在用於編譯您的託管代碼,而其他可執行文件中的託管代碼可能使用任一編譯器。

當啓用fallback mechanism時,會加載compatjit.dll。否則,它不會被加載。

請注意,如果您安裝了.NET 4.6(aka .NET 2015),那麼RyuJIT將在默認情況下使用,即使您針對的是舊版本的框架。

關於RyuJIT VS JIT64。 JIT64生成的代碼本身當前比RyuJIT生成的代碼更快。所以不要指望這方面的性能有所提升。另一方面,編譯時間會有所不同。根據Microsoft,RyuJIT的編譯時間可以比JIT64快30%,高達15%。所以不要指望這方面的性能有所提升。

但是,當.NET 2015發佈時,情況可能會有所改變。

注意

如果目標平臺是「任何CPU」,在「首選32位」複選框,在構建標籤必須選中。否則,將使用x86 JIT。

+0

謝謝你的回答! :) –

6

在這裏你去

安裝後,有兩種方法打開RyuJIT。如果您只想爲一個應用程序啓用RyuJIT,請設置一個環境變量:COMPLUS_AltJit = *。如果要爲整個機器啓用RyuJIT,請將註冊表項HKLM \ SOFTWARE \ Microsoft.NETFramework \ AltJit設置爲字符串「*」。這兩種方法都會導致64位CLR使用RyuJIT而不是JIT64。無一不是臨時設置,安裝RyuJIT不會使你的機器的任何永久性的變化(從一個目錄安裝RyuJIT文件放在一邊,那是。)

.NET Framework 4.6 - Testing with RyuJIT

中獲得,但它應該是默認情況下已激活

.NET Framework 4.6包含用於64位進程的新Just-In-Time(JIT)編譯器,稱爲RyuJIT。它是默認啓用的。它仍然是預覽版本,因此您可能會發現尚未解決的問題。

.NET Framework 4.6 - Testing with RyuJIT

兩者出於測試目的,如果你encouter與RyuJIT任何異常,您可以在app.config中的設置將其關閉。這使用舊的JIT64。

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

然而,RyuJIT CTP5目前並不在Visual Studio的 「14」 CTP4工作。無論如何,你不需要它,因爲在Visual Studio「14」CTP4上默認啓用RyuJIT。 :)(RyuJIT的Visual Studio中的版本「14」 CTP4比這個CTP稍微大一點,但不是很大。)

RyuJIT CTP5: Getting closer to shipping, and with better SIMD support

摘自我發現了一個博客帖子中,以確定所使用JIT運行時,但它會考慮den JIT64編譯器中的已知錯誤。示例代碼發佈爲here。我不確定這是否是一種可靠的方法來確定它。

+0

感謝您的回覆!在那種情況下,我想知道爲什麼RyuJIT在編譯速度方面似乎沒有做任何事情。你有什麼想法,爲什麼這可能是這種情況? –

+0

@AdrianGrigore:不,我不確定。平臺目標是爲您的項目設置的? AnyCPU,x64? – Jehof

+0

是的。該項目設置爲x64,「首選32位」已禁用,並且該項目在Windows 8.1 x64上的IIS中運行。另外,如果我將構建目標設置爲x86,則IIS拒絕運行它。 –

0

RyuJIT在編譯代碼時會自動激活,這只是一個編譯器,它可以在64位模式下運行,訪問內存以提高編譯速度30%,並且在JIT編譯器中花費的時間只是啓動時間的一個組件,所以應用程序啓動速度不會快一倍,因爲JIT速度是其兩倍。

您可以檢查您目前的RAM內存狀態和運行過程中提供免費的可用內存,如果它是足夠的,那麼它必須跑得更快,否則有帳戶的時候考慮到內存分配。

+0

因爲我安裝了VS 2015 RC,所以編譯時間並沒有減少。我正在使用16 GB內存的計算機,大約有5 GB的額外內存可用,所以我不認爲內存不足是問題所在。 –

相關問題