Включение RyuJIT в Visual Studio 2015 RC
После установки Visual Studio 2015 RC1 я загрузил устаревший проект ASP.NET и изменил версию.NET на 4.6. Проект работает нормально, но сайт по-прежнему загружается так же медленно, как всегда. Я ожидал, что RyuJIT начнет действовать, но, видимо, это не так.
Я посмотрел эту ветку о RyuJIT и не вижу никаких следов RyuJIT ни с одним из методов, описанных там.
Та же проблема возникает и с пустым консольным проектом. Я не вижу Ryujit в окне вывода, в окне Модули или в качестве запущенной задачи Windows.
Таким образом, либо RyuJIT не может быть обнаружен, как это было в предыдущих превью, либо он не работает. В любом случае, я застрял.
Как я могу проверить, что RyuJIT работает в VS 2015 и что мне нужно сделать, чтобы он работал в случае, если это не так?
3 ответа
Сначала перейдите в настройки проекта, вкладку "Отладка" и убедитесь, что включена отладка собственного кода. Это позволяет вам видеть как собственные, так и управляемые исполняемые файлы в окне модулей Visual Studio.
Теперь запустите программу в режиме отладки или выпуска и откройте окно модулей. Вы увидите одну из двух вещей:
- Загружается только clrjit.dll, что означает, что RyuJIT используется для компиляции всего управляемого кода.
- Или загружаются и clrjit.dll, и compatjit.dll, что означает, что устаревший JIT64-компилятор используется для компиляции управляемого кода, в то время как управляемый код в других исполняемых файлах может использовать любой компилятор.
compatjit.dll загружается, когда включен резервный механизм. В противном случае он не загружен.
Обратите внимание, что если вы установили.NET 4.6 (он же.NET 2015), то RyuJIT будет использоваться по умолчанию, даже если вы ориентированы на более старые версии фреймворка.
Что касается RyuJIT против JIT64. Сам сгенерированный код JIT64 в настоящее время работает быстрее, чем код, сгенерированный RyuJIT. Так что не ожидайте улучшения производительности в этом аспекте. С другой стороны, время компиляции варьируется. По данным Microsoft, время компиляции RyuJIT может быть быстрее, чем JIT64, до 30% и медленнее до 15%. Так что не ожидайте улучшения производительности и в этом аспекте.
Однако после выпуска.NET 2015 все может немного измениться.
Заметка
Если целевой платформой является "Любой процессор", флажок "Предпочитать 32-разрядный" на вкладке "Сборка" должен быть снят. В противном случае будет использован x86 JIT.
Ну вот
После установки есть два способа включить 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 включает новый компилятор Just-In-Time (JIT) для 64-битных процессов, который называется 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.:) (Версия RyuJIT в Visual Studio "14" CTP4 немного старше этой CTP, но ненамного.)
Взято из RyuJIT CTP5: ближе к отправке и с лучшей поддержкой SIMD
Я нашел Blogpost для определения используемого JIT во время выполнения, но он учитывает известную ошибку в компиляторе den JIT64. Пример кода размещен здесь. Я не уверен, что это надежный способ определить это.
RyuJIT активируется автоматически, пока вы компилируете код, и это всего лишь компилятор, который работает в 64-битном режиме с доступом к оперативной памяти для ускорения вашей компиляции на 30% быстрее, а время, проведенное в JIT-компиляторе, является лишь одним из компонентов времени запуска, поэтому приложение не не начинайте вдвое быстрее только потому, что JIT в два раза быстрее.
Вы можете проверить текущее состояние оперативной памяти и запустить процесс со свободной доступной памятью, если этого достаточно, тогда он должен работать быстрее, в противном случае необходимо учитывать время, выделяемое для выделения памяти.