2015-05-04 19 views
14

Po zainstalowaniu Visual Studio 2015 RC1, załadowałem starszą wersję projektu ASP.NET i zmieniłem wersję .NET na 4.6. Projekt działa dobrze, ale strona wciąż ładuje się tak wolno, jak zawsze. Spodziewałem się, że RyuJIT się pojawi, ale najwyraźniej tak nie jest.Włączanie RyuJIT w Visual Studio 2015 RC

Spojrzałem na this thread o RyuJIT i nie widzę żadnego śladu RyuJIT z żadną z opisanych tam metod.

Ten sam problem występuje również w pustym projekcie konsoli. Nie widzę Ryujit w oknie wyjściowym, oknie Modułów lub jako działające okno.

Tak więc ani RyuJIT nie może zostać wykryty tak, jak było wcześniej w podglądzie lub nie jest uruchomiony. Tak czy siak, utknąłem.

Jak mogę sprawdzić, czy RyuJIT działa w VS 2015 i co muszę zrobić, aby uruchomić go w przypadku, gdy tak nie jest?

+0

Czy wiesz, że RyuJIT ma tylko 64-bit? Być może działasz jako 32-bitowy? – leppie

+0

@leppie: Pracuję nad systemem Windows 8.1 x64. W projekcie konsoli. Pole wyboru "Preferuj 32-bitowe" jest odznaczone, więc zakładam, że używa ono 64-bitów. W projekcie ASP.NET to pole wyboru jest wyszarzone, nie wiem, co to oznacza. –

+0

Nie ma opcji, aby * nie * używać go w .NET 4.6, jest zawsze używany do kodu 64-bitowego jit. Czy * nie * oczekuj poprawy szybkości, która nie była celem projektu. –

Odpowiedz

6

Najpierw przejdź do ustawień projektu, karta Debuguj i upewnij się, że włączone jest debugowanie kodu natywnego. Umożliwia to wyświetlanie natywnych oraz zarządzanych plików wykonywalnych w oknie modułów programu Visual Studio.

Teraz uruchom program w trybie debugowania lub zwolnienia i otwórz okno modułów. Zobaczysz jedną z dwóch rzeczy:

  • Albo tylko clrjit.dll jest załadowany, co oznacza, że ​​RyuJIT jest używany do kompilowania całego zarządzanego kodu.
  • Załadowane są zarówno clrjit.dll, jak i compatjit.dll, co oznacza, że ​​starszy kompilator JIT64 jest używany do kompilowania swojego zarządzanego kodu, podczas gdy kod zarządzany w innych plikach wykonywalnych może korzystać z kompilatora.

Plik compatjit.dll zostaje załadowany po włączeniu fallback mechanism. W przeciwnym razie nie jest załadowany.

Należy pamiętać, że jeśli zainstalowałeś .NET 4.6 (również .NET 2015), to domyślnie użyjesz RyuJIT, nawet jeśli masz na starsze wersje frameworka.

Jeśli chodzi o RyuJIT vs JIT64. Wygenerowany sam kod JIT64 jest obecnie szybszy niż kod generowany przez RyuJIT. Więc nie oczekuj poprawy wydajności w tym aspekcie. Z drugiej strony czas kompilacji jest różny. Według Microsoft, czas kompilacji RyuJIT może być szybszy niż JIT64 nawet o 30%, a wolniejszy od nawet o 15%. Więc nie oczekuj poprawy wydajności również w tym aspekcie.

Rzeczy mogą się nieco zmienić po wydaniu programu .NET 2015.

Uwaga

Jeżeli platforma docelowa jest „Każda CPU”, w „Wolę 32-bit” checkbox w zakładce budowy musi być zaznaczona. W przeciwnym razie zostanie użyty JIT x86.

+0

Dzięki za odpowiedź! :) –

6

Tu idziesz

Po instalacji, istnieją dwa sposoby, aby włączyć RyuJIT. Jeśli chcesz włączyć RyuJIT dla jednej aplikacji, ustaw zmienną środowiskową: COMPLUS_AltJit = *. Jeśli chcesz włączyć RyuJIT dla całego komputera, ustaw klucz rejestru HKLM \ SOFTWARE \ Microsoft.NETFramework \ AltJit na łańcuch "*". Obie metody powodują, że 64-bitowy CLR używa RyuJIT zamiast JIT64. I oba są ustawienia zainstalowanie tymczasowe RyuJIT nie ma żadnych stałych zmian w komputerze (oprócz instalowania plików RyuJIT w katalogu, że jest.)

Zrobione z .NET Framework 4.6 - Testing with RyuJIT

Ale to powinno być aktywowane domyślnie

.NET Framework 4.6 zawiera nowy kompilator JIT (Just-In-Time) dla procesów 64-bitowych, zwany RyuJIT. Jest on domyślnie włączony. Nadal jest to wersja poglądowa, więc możesz odkryć problemy, które jeszcze nie zostały naprawione.

Zrobione z .NET Framework 4.6 - Testing with RyuJIT

do celów testowych, jeśli encouter żadnego wyjątku z RyuJIT, można go wyłączyć za pomocą ustawienia w app.config. Używa starszego JIT64.

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

Jednak RyuJIT CTP5 obecnie nie działa na Visual Studio "14" CTP4. I tak nie jest to konieczne, ponieważ funkcja RyuJIT jest domyślnie włączona w programie Visual Studio "14" CTP4. :) (Wersja RyuJIT w Visual Studio "14" CTP4 jest nieco starszy niż ten CTP, ale nie za dużo.)

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

znalazłem blogpost celu określenia używane podczas JIT runtime, ale bierze pod uwagę znany błąd w kompilatorze den JIT64. Przykładowy kod został opublikowany here. Nie jestem pewien, czy jest to niezawodny sposób na określenie tego.

+0

Dzięki za odpowiedź!W tym przypadku zastanawiam się, dlaczego RyuJIT nie robi nic, jeśli chodzi o szybkość kompilacji. Czy masz jakieś pojęcie, dlaczego tak się dzieje? –

+0

@AdrianGrigore: Nie, nie jestem pewien. Jaki cel platformy jest ustawiony dla twojego projektu? AnyCPU, x64? – Jehof

+0

Tak. Projekt jest ustawiony na x64, "Preferuj 32 bity" jest wyłączony, a projekt jest uruchomiony w IIS na Windows 8.1 x64. Ponadto, jeśli ustawię opcję kompilacji na x86, IIS odmówi jej uruchomienia. –

0

RyuJIT aktywuje się automatycznie podczas kompilacji kodu i jest to po prostu kompilator uruchamiany w trybie 64-bitowym z dostępem do pamięci RAM w celu zwiększenia kompilacji o 30% szybciej, a czas spędzony w kompilatorze JIT to tylko jeden składnik czasu uruchamiania, więc aplikacja nie uruchamia się dwa razy szybciej, tylko dlatego, że JIT jest dwa razy szybszy.

możesz sprawdzić aktualny stan pamięci RAM i uruchomiony proces z wolną dostępną pamięcią, jeśli to wystarcza, to musi działać szybciej, w przeciwnym razie należy wziąć pod uwagę czas na przydzielanie pamięci.

+0

Czas kompilacji nie jest zmniejszony, ponieważ zainstalowałem VS 2015 RC. Pracuję na komputerze z 16 GB pamięci RAM, z około 5 GB dodatkowej dostępnej pamięci, więc nie sądzę, że brak pamięci RAM jest problemem. –

Powiązane problemy