Перейти к содержимому

Ngen exe что это

  • автор:

Повышение производительности запуска с помощью NGen

Только в EF6 и более поздних версиях. Функции, API и другие возможности, описанные на этой странице, появились в Entity Framework 6. При использовании более ранней версии могут быть неприменимы некоторые или все сведения.

Платформа .NET Framework поддерживает создание собственных образов для управляемых приложений и библиотек в качестве способа ускорить работу приложений, а также в некоторых случаях использовать меньше памяти. Собственные образы создаются путем преобразования управляемых сборок кода в файлы, содержащие инструкции машинного компьютера перед выполнением приложения, что позволяет компилятору .NET JIT (JIT-JIT) создавать собственные инструкции во время выполнения приложения.

До версии 6 основные библиотеки среды выполнения EF были частью платформа .NET Framework и собственных образов были созданы автоматически для них. Начиная с версии 6 вся среда выполнения EF была объединена в пакет NuGet EntityFramework. Собственные образы теперь необходимо создать с помощью средства командной строки NGen.exe, чтобы получить аналогичные результаты.

Эмпирические наблюдения показывают, что собственные образы сборок среды выполнения EF могут сократиться в диапазоне от 1 до 3 секунд времени запуска приложения.

Как использовать NGen.exe

Основная функция средства NGen.exe — установка (т. е. создание и сохранение на диске) собственных образов сборки и всех его прямых зависимостей. Вот как это можно сделать:

  1. Откройте окно командной строки с правами администратора.
  2. Измените текущий рабочий каталог на расположение сборок, для которого требуется создать собственные образы:

%WINDIR%\Microsoft.NET\Framework\v4.0.30319\ngen install

Для 64-разрядного запуска:

%WINDIR%\Microsoft.NET\Framework64\v4.0.30319\ngen install

Создание собственных образов для неправильной архитектуры является очень распространенной ошибкой. При сомнении вы можете просто создать собственные образы для всех архитектур, которые применяются к операционной системе, установленной на компьютере.

NGen.exe также поддерживает другие функции, такие как удаление и отображение установленных собственных образов, очередь создания нескольких образов и т. д. Дополнительные сведения об использовании см. в документации NGen.exe.

Когда следует использовать NGen.exe

Когда речь идет о выборе сборок для создания собственных образов в приложении на основе EF версии 6 или более поздней, следует рассмотреть следующие варианты:

  • Основная сборка среды выполнения EF EntityFramework.dll: обычное приложение на основе EF выполняет значительный объем кода из этой сборки при запуске или первом доступе к базе данных. Следовательно, создание собственных образов этой сборки приведет к наибольшему повышению производительности запуска.
  • Любая сборка поставщика EF, используемая приложением: время запуска также может немного воспользоваться созданием собственных образов этих файлов. Например, если приложение использует поставщик EF для SQL Server, необходимо создать собственный образ для EntityFramework.SqlServer.dll.
  • Сборки и другие зависимости приложения. Документация NGen.exe охватывает общие критерии выбора сборок для создания собственных образов и влияния собственных образов на безопасность, расширенные параметры, такие как «жесткая привязка», такие как использование собственных образов в сценариях отладки и профилирования и т. д.

Тщательно измеряйте влияние использования собственных образов как на производительность запуска, так и на общую производительность приложения и сравнивайте их с фактическими требованиями. Хотя собственные образы, как правило, помогают повысить производительность запуска и в некоторых случаях сократить использование памяти, но не все сценарии будут действовать одинаково. Например, при устойчивом выполнении состояния (то есть после вызова всех методов, используемых приложением, по крайней мере один раз) код, созданный компилятором JIT, может на самом деле повысить производительность, чем собственные образы.

Использование NGen.exe на компьютере разработки

Во время разработки компилятор JIT .NET будет предлагать лучший общий компромисс для кода, который часто меняется. Создание собственных образов для скомпилированных зависимостей, таких как сборки среды выполнения EF, может помочь ускорить разработку и тестирование путем сокращения нескольких секунд в начале каждого выполнения.

Хорошее место для поиска сборок среды выполнения EF — это расположение пакета NuGet для решения. Например, для приложения с помощью EF 6.0.2 с SQL Server и назначения .NET 4.5 или более поздней версии можно ввести следующее в окне командной строки (не забудьте открыть его в качестве администратора):

cd \packages\EntityFramework.6.0.2\lib\net45 %WINDIR%\Microsoft.NET\Framework\v4.0.30319\ngen install EntityFramework.SqlServer.dll %WINDIR%\Microsoft.NET\Framework64\v4.0.30319\ngen install EntityFramework.SqlServer.dll 

Это позволяет использовать тот факт, что установка собственных образов для поставщика EF для SQL Server также по умолчанию установит собственные образы для основной сборки среды выполнения EF. Это работает, так как NGen.exe может обнаружить, что EntityFramework.dll является прямой зависимостью сборки EntityFramework.SqlServer.dll, расположенной в том же каталоге.

Создание собственных образов во время установки

Набор средств WiX поддерживает очередь создания собственных образов для управляемых сборок во время установки, как описано в этом руководстве. Другой альтернативой является создание настраиваемой задачи установки, которая выполняет команду NGen.exe.

Проверка использования собственных образов для EF

Вы можете убедиться, что конкретное приложение использует собственную сборку, найдите загруженные сборки с расширением .ni.dll или .ni.exe. Например, собственный образ для основной сборки среды выполнения EF будет называться EntityFramework.ni.dll. Простой способ проверить загруженные сборки .NET процесса — использовать Обозреватель процесса.

Другие вещи, которые следует учитывать

Создание собственного образа сборки не следует путать с регистрацией сборки в GAC (глобальный кэш сборок). NGen.exe позволяет создавать образы сборок, которые не находятся в GAC, и на самом деле несколько приложений, использующих определенную версию EF, могут совместно использовать один и тот же собственный образ. Хотя Windows 8 может автоматически создавать собственные образы для сборок, размещенных в GAC, среда выполнения EF оптимизирована для развертывания вместе с приложением, и мы не рекомендуем зарегистрировать его в GAC, так как это негативно влияет на разрешение сборок и обслуживание приложений среди других аспектов.

Как удалить ngen

Подлинный файл является одним из компонентов программного обеспечения .NET Framework, разработанного Microsoft .

NGen — это аббревиатура от Native Generator

Ngen.exe — это исполняемый файл (программа) для Windows. Расширение имени файла .exe — это аббревиатура от англ. слова executable — исполнимый. Необходимо запускать исполняемые файлы от проверенных производителей программ, потому что исполняемые файлы могут потенциально изменить настройки компьютера или нанести вред вашему компьютеру. Бесплатный форум с информацией о файлах может помочь вам разобраться является ли ngen.exe вирусом, трояном, программой-шпионом, рекламой, которую вы можете удалить, или файл принадлежит системе Windows или приложению, которому можно доверять.

Вот так, вы сможете исправить ошибки, связанные с ngen.exe

  1. Используйте программу Настройщик Windows, чтобы найти причину проблем, в том числе и медленной работы компьютера.
  2. Обновите программу ngen.exe. Обновление можно найти на сайте производителя (ссылка приведена ниже).
  3. В следующих пунктах предоставлено описание работы ngen.exe.

Информация о файле ngen.exe

Описание: ngen.exe часто вызывает проблемы и необходим для Windows. Файл ngen.exe находится в подпапках C:\Windows. Известны следующие размеры файла для Windows 10/11/7 141,976 байт (16% всех случаев), 173,720 байт и еще 4 варианта .
У процесса нет видимого окна. Сертифицировано надежной компанией. Это файл, подписанный Microsoft. Ngen.exe способен мониторить приложения. Поэтому технический рейтинг надежности 13% опасности.
Если вы хотите полностью удалить программу, перейдите в Панель управления ⇒ Программы ⇒ Microsoft .NET Framework 4 Client Profile или Microsoft .NET Framework.

Важно: Некоторые вредоносные программы маскируют себя как ngen.exe. Таким образом, вы должны проверить файл ngen.exe на вашем ПК, чтобы убедиться, что это угроза. Мы рекомендуем Security Task Manager для проверки безопасности вашего компьютера.

Комментарий пользователя

это вирус
Компонент .NET Framework — NGen (Native Image Generator, генератор низкоуровневых образов). Необходим для работы .NET и многих приложений (дополнительная информация)

Итого: Средняя оценка пользователей сайта о файле ngen.exe: — на основе 4 голосов с 2 отзывами.
42 пользователей спрашивали про этот файл. Один пользователь оценил, как важный для Windows или установленной программы. 3 пользователей оценили, как опасный.

Лучшие практики для исправления проблем с ngen

Аккуратный и опрятный компьютер — это главное требование для избежания проблем с ngen. Для этого требуется регулярная проверка компьютера на вирусы, очистка жесткого диска, используя cleanmgr и sfc /scannow, удаление программ, которые больше не нужны, проверка программ, которые запускаются при старте Windows (используя msconfig) и активация Автоматическое обновление Windows. Всегда помните о создании периодических бэкапов, или в крайнем случае о создании точек восстановления.

Если у вас актуальные проблемы, попробуйте вспомнить, что вы делали в последнее время, или последнюю программу, которую вы устанавливали перед тем, как появилась впервые проблема. Используйте команду resmon, чтобы определить процесс, который вызывает проблемы. Даже если у вас серьезные проблемы с компьютером, прежде чем переустанавливать Windows, лучше попробуйте восстановить целостность установки ОС или для Windows 8 и более поздних версий Windows выполнить команду DISM.exe /Online /Cleanup-image /Restorehealth. Это позволит восстановить операционную систему без потери данных.

Следующие программы могут вам помочь для анализа процесса ngen.exe на вашем компьютере: Security Task Manager отображает все запущенные задания Windows, включая встроенные скрытые процессы, такие как мониторинг клавиатуры и браузера или записей автозагрузки. Уникальная оценка рисков безопасности указывает на вероятность процесса быть потенциально опасным — шпионской программой, вирусом или трояном. Malwarebytes Anti-Malware определяет и удаляет бездействующие программы-шпионы, рекламное ПО, трояны, кейлоггеры, вредоносные программы и трекеры с вашего жесткого диска.

ngen сканер

Security Task Manager показывает все запущенные сервисы Windows, включая внедренные скрытые приложения (например, мониторинг клавиатуры или браузера, авто вход). Уникальный рейтинг надежности указывает на вероятность того, что процесс потенциально может быть вредоносной программой-шпионом, кейлоггером или трояном.

Бесплатный aнтивирус находит и удаляет неактивные программы-шпионы, рекламу, трояны, кейлоггеры, вредоносные и следящие программы с вашего жесткого диска. Идеальное дополнение к Security Task Manager.

Инструмент ремонта ПК бесплатное сканирование, очистка, восстановление и оптимизация вашей системы.

Ngen.exe (генератор образов в машинном коде)

Генератор образов в машинном коде (Ngen.exe) — это средство повышения быстродействия управляемых приложений. Программа Ngen.exe создает образы в машинном коде, представляющие собой файлы, содержащие компилированный, специфический для процессора машинный код, и устанавливает их в кэш образов в машинном коде на локальном компьютере. Среда выполнения может использовать образы в машинном коде, находящиеся в кэше, вместо использования JIT-компилятора для компиляции исходной сборки.

Ngen.exe компилирует собственные образы для сборок, предназначенных только для платформа .NET Framework. Аналогичным генератором образов в машинном коде для .NET Core является CrossGen.

Изменения в Ngen.exe в платформа .NET Framework 4:

  • Теперь программа NGen.exe компилирует сборки с полным доверием, и политика разграничения доступа кода (CAS) больше не вычисляется.
  • Образы в машинном коде, созданные с помощью NGen.exe, нельзя загружать в приложения, выполняющиеся в режиме частичного доверия.

Изменения в программе NGen.exe для .NET Framework версии 2.0.

  • При установке сборки также устанавливаются ее зависимости, что упрощает синтаксис Ngen.exe.
  • Образы в машинном коде теперь могут использоваться совместно в различных доменах приложений.
  • Новое действие, update , заново создает образы, ставшие недействительными.
  • Служба может отложить выполнение действий, используя для создания и установки образов время простоя компьютера.
  • Были устранены некоторые причины недействительности образов.

Подробнее об использовании программы Ngen.exe и службы образов в машинном коде см. в разделе Служба образов в машинном коде.

Синтаксис Ngen.exe для .NET Framework версий 1.0 и 1.1 см. в разделе Генератор образов в машинном коде (Ngen.exe), традиционный синтаксис.

Эта программа автоматически устанавливается вместе с Visual Studio. Для запуска этого средства используйте Командную строку разработчика или PowerShell для разработчиков в Visual Studio.

В командной строке введите следующее.

Синтаксис

ngen action [options] 
ngen /? | /help 

Действия

В следующей таблице показан синтаксис каждого из действий action . Описания отдельных частей параметра action см. в таблицах Аргументы, Уровни приоритета, Сценарии и Конфигурации. В таблице Параметры описываются параметр options и ключи справки.

Действие Описание
install [ assemblyName | assemblyPath ] [ scenarios ] [ config ] [ /queue [ : < 1 | 2 | 3 >]] Формирует образы в машинном коде для сборки и ее зависимостей, а затем устанавливает образы в кэш образов в машинном коде.

Аргументы

Аргумент Описание
assemblyName Полное отображаемое имя сборки. Например, «myAssembly, Version=2.0.0.0, Culture=neutral, PublicKeyToken=0038abc9deabfle5» . Примечание: Можно указать частичное имя сборки, например myAssembly , для display действий и uninstall .

Если имя файла задано без пути, сборка должна находиться в текущем каталоге.

Уровни приоритета

Приоритет Описание
1 Образы в машинном коде создаются и устанавливаются немедленно, не дожидаясь периода простоя.
2 Образы в машинном коде генерируются и устанавливаются, не дожидаясь периода простоя, но после завершения всех действий и их зависимостей действий с приоритетом 1.
3 Образы в машинном коде устанавливаются, когда служба образов в машинном коде обнаружит, что компьютер находится в режиме простоя. См. раздел Служба образов в машинном коде.

Сценарии

Сценарий Описание
/Debug Создает образы в машинном коде, которые можно использовать с отладчиком.
/Profile Создает образы в машинном коде, которые можно использовать с профилировщиком.
/NoDependencies Создает минимальное число образов в машинном коде, которое требуется в соответствии с параметрами конкретного сценария.

Config

Конфигурация Описание
/ExeConfig: exePath Используется конфигурация указанной исполняемой сборки.

Параметры

Параметр Описание:
/nologo Отключает загрузочный баннер корпорации Майкрософт при запуске.
/silent Отключает отображение сообщений об успешно выполненных операциях.
/verbose Отображает подробные сведения для отладки.
/help , /? Отображает синтаксис команды и параметры для текущего выпуска.

Примечания

Для запуска Ngen.exe требуются права администратора.

Не запускайте программу NGen.exe в сборках с неполным доверием. Начиная с платформа .NET Framework 4, Ngen.exe компилирует сборки с полным доверием, а политика безопасности доступа к коду (CAS) больше не оценивается.

Начиная с платформа .NET Framework 4 собственные образы, созданные с помощью Ngen.exe, больше не могут загружаться в приложения, работающие с частичным доверием. Вместо этого вызывается JIT-компилятор.

Программа Ngen.exe создает образы в машинном коде для сборки, указанной аргументом assemblyname , для действия install и всех его зависимостей. Зависимости определяются по ссылкам в манифесте сборки. Единственный сценарий, в котором необходимо задавать зависимость отдельно, — это когда приложение загружает зависимость с помощью отражения, например путем вызова метода Assembly.Load.

Не используйте метод Assembly.LoadFrom с образами в машинном коде. Образ, загруженный этим методом, не может использоваться другими сборками в контексте выполнения.

Программа Ngen.exe ведет подсчет зависимостей. Например, пусть и MyAssembly.exe и YourAssembly.exe установлены в кэше образов в машинном коде и содержат ссылки на OurDependency.dll . При удалении MyAssembly.exe библиотека OurDependency.dll не удаляется. Она удаляется только после удаления YourAssembly.exe .

При создании образа в машинном коде для сборки из глобального кэша сборок необходимо указать ее отображаемое имя. См. раздел Assembly.FullName.

Образы в машинном коде, созданные программой Ngen.exe, могут совместно использоваться в доменах приложений. Это означает, что программу Ngen.exe можно использовать в сценариях приложений, требующих совместного использования сборок в доменах приложений. Чтобы определить независимость от домена, выполните следующие действия.

  • Примените к своему приложению атрибут LoaderOptimizationAttribute.
  • При создании сведений о настройке для нового домена приложений задайте свойство AppDomainSetup.LoaderOptimization.

При загрузке одной и той же сборки в несколько доменов приложений всегда используйте программный код, независимый от домена. Если образ в машинном коде, загруженный в общий домен приложения, загружается в неиспользуемый совместно домен, его использование невозможно.

Независимый от домена код не может быть выгружен, и быстродействие может слегка снизиться, особенно при доступе к статическим членам.

В этом разделе примечаний

  • Формирование образов для различных сценариев
  • Определение случаев использования образов в машинном коде
    • Оптимизация использования памяти
    • Ускорение запуска приложения
    • Обзор аспектов использования
    • Задание для зависимости подсказки, касающейся привязки
    • Задание для сборки подсказки для привязки по умолчанию
    • Недействительные образы
    • Средство просмотра журнала привязки сборок
    • Помощник по отладке управляемого кода JITCompilationStart
    • Отказ от формирования образа в машинном коде

    Формирование образов для различных сценариев

    После создания образа в машинном коде для сборки среда выполнения автоматически пытается обнаружить и использовать этот образ в машинном коде при каждом запуске сборки. В зависимости от сценариев использования может быть создано несколько образов.

    Например, при запуске сборки в рамках сценария отладки или профилирования среда выполнения ищет образ в машинном коде, созданный с параметрами /Debug или /Profile . Если найти соответствующий образ в машинном коде не удается, среда выполнения возвращается к стандартной схеме JIT-компиляции. Единственным способом отладки образов в машинном коде является создание образа в машинном коде с параметром /Debug .

    Действие uninstall также распознает сценарии, позволяя удалить все или только выбранные сценарии.

    Определение случаев использования образов в машинном коде

    Образы в машинном коде могут повысить производительность в двух областях: оптимизация использования памяти и уменьшение времени запуска.

    Производительность образов в машинном коде зависит от множества факторов, усложняющих анализ, например: шаблоны доступа к коду и данным, количество вызовов, выполняемых через границы модуля, и количество зависимостей, уже загруженных другими приложениями. Единственным способом определить, обеспечивают ли образы в машинном коде преимущество для конкретного приложения, являются тщательные измерения производительности в основных сценариях развертывания.

    Оптимизация использования памяти

    Использование образов в машинном коде может заметно повысить эффективность использования памяти в ситуациях, когда код используется одновременно несколькими процессами. Образы в машинном коде являются файлами Windows PE, поэтому несколько процессов могут совместно использовать одну копию DLL-файла. Напротив, образ в машинном коде, созданный JIT-компилятором, хранится в выделенной памяти и не может быть использован совместно.

    Преимущества совместно используемых кодовых страниц также распространяются на приложения, выполняемые с использованием служб терминалов.

    Кроме того, отсутствие необходимости загружать JIT-компилятор экономит определенный объем памяти для каждого экземпляра приложения.

    Ускорение запуска приложения

    Предварительная компиляция сборок с помощью программы Ngen.exe может уменьшить время запуска некоторых приложений. В общем случае, преимущество достигается благодаря тому, что приложения совместно используют сборки компонентов, так как после запуска первого приложения общие компоненты оказываются уже загруженными в память для последующих приложений. При холодном запуске, когда все сборки в приложении должны загружаться с жесткого диска, использование образов в машинном коде не обеспечивает таких преимуществ, поскольку основное значение имеет время доступа к жесткому диску.

    На время запуска может повлиять жесткая привязка, поскольку все образы, жестко привязанные к главной сборке приложения, должны загружаться в одно и то же время.

    До .NET Framework 3.5 с пакетом обновления 1 (SP1) необходимо было помещать общие компоненты со строгими именами в глобальный кэш сборок, так как загрузчик выполняет дополнительную проверку сборок со строгими именами, отсутствующих в глобальном кэше сборок, фактически сводя на нет уменьшение времени запуска, создаваемое за счет использования образов в машинном коде. За счет ряда усовершенствований, которые впервые появились в NET Framework 3.5 SP1, была исключена дополнительная проверка.

    Обзор аспектов использования

    Следующие общие положения и аспекты использования приложений могут помочь принять решение, следует ли тратить ресурсы на оценку применения образов в машинном коде для разрабатываемого приложения.

    • Образы в машинном коде загружаются быстрее чем CIL, поскольку они не требуют множества операций запуска, таких как JIT-компиляция и проверка безопасности типа.
    • За счет устранения JIT-компилятора из процесса разработки образы в машинном коде требуют меньшего первоначального объема работы.
    • Образы в машинном коде обеспечивают совместное использование кода несколькими процессами.
    • Образам в машинном коде требуется больше места на жестком диске по сравнению со сборками CIL. Кроме того, их создание может занимать значительное время.
    • Образы в машинном коде необходимо обслуживать.
      • При обслуживании исходной сборки или одной из ее зависимостей образы необходимо создавать заново.
      • Для одной сборки может понадобиться несколько образов в машинном коде, используемых в различных приложениях или различных сценариях. Например, сведения о конфигурации в двух приложениях могут привести к различным решениям привязки для одной и той же зависимой сборки.
      • Образы в машинном коде должны создаваться администратором, то есть под учетной записью Windows в группе «Администраторы».

      Помимо этих общих положений, при рассмотрении преимуществ использования образов в машинном коде с точки зрения производительности необходимо учитывать суть разрабатываемого приложения.

      • Если приложение выполняется в среде, в которой используется множество общих компонентов, образы в машинном коде обеспечивают совместное использование компонентов несколькими процессами.
      • Если приложение использует несколько доменов приложений, образы в машинном коде обеспечивают совместное использование кодовых страниц в нескольких доменах.

      Примечание В .NET Framework версий 1.0 и 1.1 совместное использование образов в машинном коде в нескольких доменах приложений невозможно. Однако в версии 2.0 и более поздних версиях ситуация изменилась.

      Важность базовых адресов сборок

      Поскольку образы в машинном коде являются файлами Windows PE, они подвержены тем же проблемам изменения базовых адресов, что и другие исполняемые файлы. При использовании жесткой привязки влияние перемещения на производительность становится еще более заметным.

      Чтобы задать базовый адрес для образа в машинном коде, с помощью соответствующего параметра компилятора можно задать базовый адрес сборки. Программа Ngen.exe использует этот базовый адрес для образа в машинном коде.

      Образы в машинном коде по размеру больше управляемых сборок, используемых для их создания. Базовые адреса должны быть рассчитаны с учетом таких увеличенных размеров.

      Для просмотра предпочитаемого базового адреса образа в машинном коде можно использовать такую программу, как dumpbin.exe.

      Жесткая привязка

      Жесткая привязка увеличивает производительность и уменьшает объем работы для образов в машинном коде. Недостаток жесткой привязки состоит в том, что при загрузке сборки должны загружаться все образы, жестко привязанные к сборке. Для большого приложения это может заметно увеличить время запуска.

      Жесткая привязка подходит для зависимостей, загруженных во всех сценариях приложения, критичных для производительности. Как и для других аспектов использования образов в машинном коде, единственным способом определить, повышает ли жесткая привязка производительность приложения, являются тщательные измерения производительности.

      Атрибуты DependencyAttribute и DefaultDependencyAttribute позволяют предоставить программе Ngen.exe подсказки, касающиеся жесткой привязки.

      Эти атрибуты являются подсказками для программы Ngen.exe, а не командами. Их использование не гарантирует выполнения жесткой привязки. В будущих выпусках значение этих атрибутов может измениться.

      Задание для зависимости подсказки, касающейся привязки

      Примените атрибут DependencyAttribute к сборке, чтобы указать вероятность того, что указанная зависимость будет загружаться. LoadHint.Always указывает, что жесткая привязка подходит, Default указывает, что для зависимости должно использоваться значение по умолчанию, и Sometimes указывает, что жесткая привязка не подходит.

      В следующем коде показаны атрибуты для сборки с двумя зависимостями. Первая зависимость (Assembly1) является подходящим кандидатом для жесткой привязки, а вторая (Assembly2) — нет.

      Imports System.Runtime.CompilerServices

      using System.Runtime.CompilerServices; [assembly:DependencyAttribute("Assembly1", LoadHint.Always)] [assembly:DependencyAttribute("Assembly2", LoadHint.Sometimes)] 
      using namespace System::Runtime::CompilerServices; [assembly:DependencyAttribute("Assembly1", LoadHint.Always)]; [assembly:DependencyAttribute("Assembly2", LoadHint.Sometimes)]; 

      Имя сборки не включает в себя расширение имени файла. Разрешается использовать отображаемые имена.

      Задание для сборки подсказки для привязки по умолчанию

      Подсказки для привязки по умолчанию необходимы только для сборок, которые будут использоваться немедленно и часто любым приложением, связанным с этими сборками зависимостями. Чтобы определить необходимость использования жесткой привязки, к таким сборкам можно применить атрибут DefaultDependencyAttribute с LoadHint.Always.

      Не стоит применять атрибут DefaultDependencyAttribute к DLL-сборкам, не подпадающим под эту категорию, поскольку применение атрибута с любым значением, отличным от LoadHint.Always, аналогично полному отсутствию атрибута.

      Корпорация Майкрософт использует атрибут DefaultDependencyAttribute для указания того, что жесткая привязка является значением по умолчанию для очень небольшого числа сборок в .NET Framework, например «mscorlib.dll».

      Отложенная обработка

      Создание образов в машинном коде для очень большого приложения может занять значительное время. Аналогичным образом, изменения общего компонента или настроек компьютера могут потребовать обновления многих образов в машинном коде. Для действий install и update предусмотрен параметр /queue , который помещает операцию в очередь для отложенного выполнения службой образов в машинном коде. Кроме того, программа Ngen.exe предусматривает действия queue и executeQueuedItems , которые дают определенные возможности управления этой службой. Подробнее см. в разделе Служба образов в машинном коде.

      Образы в машинном коде и JIT-компиляция

      Если программа Ngen.exe обнаруживает в сборке методы, которые она не может создать, эти методы исключаются из этого образа. Когда среда выполнения выполняет сборку, то при обнаружении метода, отсутствующего в образе в машинном коде, выполняется JIT-компиляция.

      Кроме того, образы в машинном коде не используются, если сборка была модернизирована или по какой-либо причине стала недействительной.

      Недействительные образы

      При использовании программы Ngen.exe для создания образа сборки в машинном коде результат зависит от заданных параметров командной строки и определенных настроек компьютера. В число этих параметров входят следующие характеристики.

      • Версия .NET Framework.
      • Полное удостоверение сборки (оно изменяется при перекомпиляции).
      • Полное удостоверение всех сборок, на которые ссылается данная сборка (оно изменяется при перекомпиляции).
      • Факторы безопасности.

      Программа Ngen.exe сохраняет эти сведения при создании образа в машинном коде. При выполнении сборки среда выполнения просматривает созданный образ в машинном коде на предмет таких параметров и сравнивает их с текущими параметрами среды компьютера. Если среда выполнения не находит соответствующий образ в машинном коде, выполняется JIT-компиляция. Изменения следующих параметров компьютера и среды приводят к тому, что образы устаревают, то есть становятся непригодными для использования.

      • Версия .NET Framework. При обновлении .NET Framework все образы в машинном коде, созданные с помощью Ngen.exe, становятся недействительными. По этой причине, чтобы обеспечить повторное создание всех образов в машинном коде, все обновления .NET Framework выполняют команду Ngen Update . Платформа .NET Framework автоматически создает новые образы в машинном коде для устанавливаемых ею библиотек.
      • Полное удостоверение сборки. При перекомпиляции сборки соответствующий образ в машинном коде устаревает.
      • Полное удостоверение всех сборок, на которые ссылается данная сборка. При обновлении управляемой сборки все образы в машинном коде, прямо или косвенно зависящие от этой сборки, становятся недействительными и требуют повторного создания. Это относится и к обычным ссылкам, и к зависимостям с жесткой привязкой. При любом обновлении программного обеспечения программа установки должна выполнить команду Ngen Update , чтобы гарантировать повторное создание всех зависимых образов в машинном коде.
      • Факторы безопасности. Изменение политики безопасности на компьютере, сопровождающееся отменой разрешений, выданных сборке ранее, может привести к устареванию ранее скомпилированного образа сборки. Подробную информацию об управлении доступом для кода в среде CLR и об использовании разрешений см. в разделе Управление доступом для кода.

      Устранение неполадок

      Следующие разделы по устранению неполадок позволяют понять, какие образы в машинном коде используются, а какие — не могут использоваться для вашего приложения, определить, когда JIT-компилятор начинает компиляцию метода, а также демонстрируют, как отказаться от компиляции образов в машинном коде указанных методов.

      средство просмотра журнала привязки сборок

      Проверить, используются ли в приложении образы в машинном коде, можно с помощью Fuslogvw.exe (средства просмотра журнала привязок сборки). Выберите Образы в машинном коде в поле Категории журнала в окне средства просмотра журнала привязок. Программа Fuslogvw.exe предоставляет сведения о причинах отклонения образа в машинном коде.

      Помощник по отладке управляемого кода JITCompilationStart

      Чтобы определить, когда JIT-компилятор начинает компиляцию функции, можно использовать помощник по отладке управляемого кода jitCompilationStart.

      Отказ от формирования образа в машинном коде

      В некоторых случаях NGen.exe может испытывать трудности при создании образа в машинном коде для конкретного метода. Кроме того, может быть удобнее выполнить JIT-компиляцию метода вместо компиляции в образ в машинном коде. В этом случае можно использовать атрибут System.Runtime.BypassNGenAttribute , чтобы запретить программе NGen.exe формирование образа в машинном коде для конкретного метода. Атрибут необходимо применять по отдельности к каждому методу, код которого не нужно включать в образ в машинном коде. NGen.exe распознает атрибут и не создает код в образе в машинном коде для соответствующего метода.

      Тем не менее обратите внимание, что BypassNGenAttribute не определен как тип в библиотеке классов .NET Framework. Для использования атрибута в коде, его необходимо сначала определить следующим образом.

      namespace System.Runtime < [AttributeUsage(AttributeTargets.Method | AttributeTargets.Constructor | AttributeTargets.Property)] public class BypassNGenAttribute : Attribute < >> 
      Namespace System.Runtime Public Class BypassNGenAttribute : Inherits Attribute End Class End Namespace 

      Затем можно применить атрибут индивидуально для каждого метода. Следующий пример указывает генератору образов в машинном коде, что ему не следует формировать образ в машинном коде для метода ExampleClass.ToJITCompile .

      using System; using System.Runtime; public class ExampleClass < [BypassNGen] public void ToJITCompile() < >> 
      Imports System.Runtime Public Class ExampleClass Public Sub ToJITCompile() End Sub End Class 

      Примеры

      Следующая команда создает образ в машинном коде для приложения ClientApp.exe , расположенного в текущем каталоге, и устанавливает образ в кэш образов в машинном коде. Если для сборки существует файл конфигурации, программа Ngen.exe использует его. Кроме того, образы в машинном коде создаются для всех DLL-файлов, на которые ссылается программа ClientApp.exe .

      ngen install ClientApp.exe 

      Образ, установленный с программой Ngen.exe, также называется корнем. Корень может быть приложением или общим компонентом.

      Следующая команда создает образ в машинном коде для MyAssembly.exe с указанным путем.

      ngen install c:\myfiles\MyAssembly.exe 

      При поиске сборок и их зависимостей программа Ngen.exe использует ту же самую логику тестирования, что и среда CLR. По умолчанию каталог, содержащий приложение ClientApp.exe , используется в качестве базового каталога приложения, с которого начинается тестирование всех сборок. Это поведение можно переопределить с помощью параметра /AppBase .

      Поведение программы Ngen.exe было изменено по сравнению с .NET Framework версий 1.0 и 1.1, где в качестве базового каталога приложения использовался текущий каталог.

      Сборка может использовать зависимость без ссылки, например, если она загружает DLL-файл с помощью метода Assembly.Load. С помощью параметра /ExeConfig для такого DLL-файла можно создать образ в машинном коде, используя сведения о конфигурации для сборки приложения. Следующая команда создает образ в машинном коде для MyLib.dll, , используя сведения о конфигурации из MyApp.exe .

      ngen install c:\myfiles\MyLib.dll /ExeConfig:c:\myapps\MyApp.exe 

      Сборки, установленные таким способом, не удаляются при удалении приложения.

      Чтобы удалить зависимость, следует использовать те же параметры командной строки, которые использовались при ее установке. Следующая команда удаляет MyLib.dll из предыдущего примера.

      ngen uninstall c:\myfiles\MyLib.dll /ExeConfig:c:\myapps\MyApp.exe 

      Чтобы создать образ в машинном коде для сборки в глобальном кэше сборок, следует использовать отображаемое имя сборки. Пример:

      ngen install "ClientApp, Version=1.0.0.0, Culture=neutral, PublicKeyToken=3c7ba247adcd2081, processorArchitecture=MSIL" 

      Программа NGen.exe создает отдельный набор образов для каждого устанавливаемого сценария. Например, следующие команды устанавливают полный набор образов в машинном коде для обычной работы, другой полный набор для отладки, а третий — для профилирования.

      ngen install MyApp.exe ngen install MyApp.exe /debug ngen install MyApp.exe /profile 

      Отображение кэша образов в машинном коде

      Образы в машинном коде, установленные в кэш, можно отобразить с помощью программы Ngen.exe. Следующая команда отображает все образы в машинном коде, находящиеся в кэше образов в машинном коде.

      ngen display 

      Действие display выводит сначала все корневые сборки, а затем выводит список всех образов в машинном коде на компьютере.

      Чтобы отобразить сведения только об этой сборке, можно использовать простое имя сборки. Следующая команда выводит все образы в кэше образов в машинном коде, соответствующие неполному имени MyAssembly , их зависимости и все корни с зависимостями от MyAssembly :

      ngen display MyAssembly 

      Знание того, что корни зависят от общей сборки компонентов, полезно при определении влияния действия update после обновления общего компонента.

      Если задано расширение файла сборки, необходимо либо указать путь, либо выполнить программу Ngen.exe из каталога, в котором находится сборка.

      ngen display c:\myApps\MyAssembly.exe 

      Следующая команда выводит все образы в машинном коде с именем MyAssembly и версией 1.0.0.0, содержащиеся в кэше образов в машинном коде.

      ngen display "myAssembly, version=1.0.0.0" 

      Обновление образов

      Образы обычно обновляются после обновления общего компонента. Для обновления всех образов в машинном коде, которые были изменены или для которых были изменены зависимости, используется действие update без аргументов.

      ngen update 

      Обновление всех образов может занять длительное время. С помощью параметра /queue можно поставить обновления в очередь выполнения службы образов в машинном коде. Подробнее о параметре /queue и приоритетах установки см. в разделе Служба образов в машинном коде.

      ngen update /queue 

      Удаление образов

      Программа Ngen.exe поддерживает список зависимостей, поэтому общие компоненты удаляются, только когда удалены все сборки, зависимые от этих компонентов. Кроме того, общий компонент не удаляется, если он установлен как корень.

      Следующая команда удаляет все сценарии для корня ClientApp.exe :

      ngen uninstall ClientApp 

      Удалить конкретные сценарии можно с помощью действия uninstall . Следующая команда удаляет все сценарии отладки для ClientApp.exe :

      ngen uninstall ClientApp /debug 

      При удалении сценариев /debug не удаляется сценарий, включающий и /profile , и /debug.

      Следующая команда удаляет все сценарии для конкретной версии ClientApp.exe :

      ngen uninstall "ClientApp, Version=1.0.0.0" 

      Следующая команда удаляет все сценарии для «ClientApp, Version=1.0.0.0, Culture=neutral, PublicKeyToken=3c7ba247adcd2081, processorArchitecture=MSIL», или только сценарий отладки для этой сборки.

      ngen uninstall "ClientApp, Version=1.0.0.0, Culture=neutral, PublicKeyToken=3c7ba247adcd2081, processorArchitecture=MSIL" ngen uninstall "ClientApp, Version=1.0.0.0, Culture=neutral, PublicKeyToken=3c7ba247adcd2081, processorArchitecture=MSIL" /debug 

      Как и в случае действия install , предоставление расширения требует либо выполнения программы Ngen.exe из каталога, содержащего сборку, либо указания полного пути.

      Примеры, связанные со службой образов в машинном коде, см. в разделе Служба образов в машинном коде.

      Задача образов в машинном коде

      Задача образов в машинном коде — это задача Windows, которая создает и поддерживает образы в машинном коде. Задача образов в машинном коде автоматически создает и освобождает образы в машинном коде в поддерживаемых сценариях. Она также позволяет установщикам использовать программу Ngen.exe (генератор образов в машинном коде) для отложенного создания и обновления образов в машинном коде.

      Задача образов в машинном коде регистрируется однократно для каждой архитектуры ЦП, поддерживаемой на компьютере, чтобы обеспечить компиляцию приложений для каждой целевой архитектуры.

      Имя задачи 32-разрядный компьютер 64-разрядный компьютер
      NET Framework NGEN v4.0.30319 да да
      NET Framework NGEN v4.0.30319 64 Нет Да

      Задача собственного образа доступна в платформа .NET Framework 4.5 и более поздних версиях при выполнении на Windows 8 или более поздних версиях. В более ранних версиях Windows платформа .NET Framework использует службу образов в машинном коде.

      Время жизни задачи

      Как правило, планировщик заданий Windows запускает задачу образов в машинном коде каждую ночь, когда компьютер бездействует. Задача проверяет любые отложенные действия, помещенные в очередь установщиками приложений, любые отложенные запросы на обновление образов в машинном коде и любые операции автоматического создания образов. Задача завершает невыполненные операции, а затем завершает работу. Если компьютер выводится из состояния бездействия во время выполнении задачи, она прерывается.

      Задачу образов в машинном коде можно также запустить вручную из интерфейса планировщика заданий или посредством вызовов NGen.exe. Если задача запускается одним из этих способов, ее выполнение продолжается при выводе компьютера из состояния бездействия. Образам, созданным вручную с помощью NGen.exe, назначаются приоритеты, что обеспечивает предсказуемость поведения установщиков приложений.

      Служба образов в машинном коде

      Служба образов в машинном коде — это служба Windows, которая создает и поддерживает образы в машинном коде. Она позволяет разработчикам откладывать установку и обновление образов в машинном коде и выполнять эти процедуры позже, когда компьютер простаивает.

      Как правило, служба образов в машинном коде запускается программой установки (установщиком) приложения или обновления. Для действий с приоритетом 3 служба выполняется во время простоя компьютера. Служба сохраняет свое состояние и может при необходимости возобновлять работу после перезагрузки. Для нескольких компиляций образов может быть организована очередь.

      Служба также взаимодействует с командой Ngen.exe, выполняемой вручную. Команды, выполняемые вручную, имеют приоритет над фоновыми действиями.

      В операционной системе Windows Vista служба образов в машинном коде имеет имя «Microsoft.NET Framework NGEN v2.0.50727_X86» или «Microsoft.NET Framework NGEN v2.0.50727_X64». Во всех более ранних версиях Microsoft Windows ее имя — «.NET Runtime Optimization Service v2.0.50727_X86» или «.NET Runtime Optimization Service v2.0.50727_X64».

      Запуск отложенных операций

      Перед началом установки или обновления рекомендуется приостановить службу. Это позволит заблокировать ее на время, пока установщик будет копировать файлы или помещать сборки в глобальный кэш сборок. Для приостановки службы используется следующая командная строка Ngen.exe:

      ngen queue pause 

      После того как все отложенные операции поставлены в очередь, работу службы можно возобновить с помощью следующей команды:

      ngen queue continue 

      Чтобы отложить создание образов в машинном коде при установке нового приложения или обновлении общего компонента, используйте параметр /queue с действием install или update . Следующие командные строки Ngen.exe позволяют установить образ общего компонента в машинном коде и выполнить обновление всех корней, которых это может касаться:

      ngen install MyComponent /queue ngen update /queue 

      Действие update заново создает все образы в машинном коде, которые стали недействительными, а не только те, которые используют MyComponent .

      Если в приложении слишком много корней, можно учитывать приоритеты отложенных действий. Приведенные ниже команды создают очередь для установки трех корней. Первой устанавливается сборка Assembly1 , не дожидаясь периода бездействия. Сборка Assembly2 также устанавливается без ожидания бездействия, но после завершения всех действий с приоритетом 1. Сборка Assembly3 устанавливается, когда служба обнаруживает, что компьютер бездействует.

      ngen install Assembly1 /queue:1 ngen install Assembly2 /queue:2 ngen install Assembly3 /queue:3 

      Вы можете задать синхронное выполнение действий, находящихся в очереди, с помощью действия executeQueuedItems . Если задать необязательный приоритет, это действие затронет только те действия в очереди, которые имеют такой же или более низкий приоритет. По умолчанию подразумевается приоритет 3, поэтому следующая команда Ngen.exe обработает все действия в очереди немедленно и не вернет управление, пока они не закончатся:

      ngen executeQueuedItems 

      Синхронные команды выполняются программой Ngen.exe и не используют службу образов в машинном коде. Можно выполнять действия с помощью Ngen.exe, пока служба образов в машинном коде работает.

      Завершение работы службы

      После того как служба инициирована выполнением команды Ngen.exe с параметром /queue , она продолжает работать в фоновом режиме, пока не будут завершены все действия. Служба сохраняет свое состояние и может при необходимости возобновлять работу после перезагрузки. Как только служба обнаруживает, что в очереди больше нет действий, она сбрасывает свое состояние, чтобы не запускаться повторно после очередной перезагрузки компьютера, и затем завершает работу.

      Взаимодействие службы с клиентами

      В платформа .NET Framework версии 2.0 единственным взаимодействием со службой образов в машинном коде является Ngen.exe программы командной строки. Используйте эту программу в скриптах установки для управления очередями действий, выполняемых службой образов в машинном коде, и для взаимодействия с этой службой.

      См. также

      • Инструменты
      • Процесс управляемого выполнения
      • Обнаружение сборок в среде выполнения
      • Оболочки командной строки для разработчиков

      Совместная работа с нами на GitHub

      Источник этого содержимого можно найти на GitHub, где также можно создавать и просматривать проблемы и запросы на вытягивание. Дополнительные сведения см. в нашем руководстве для участников.

      Microsoft .NET Framework NGEN — что это за служба? (mscorsvw.exe)

      Приветствую друзья! Сегодня у нас на разбор попала служба Microsoft .NET Framework NGEN. Моя задача — максимально узнать зачем она, насколько важна, может ее вообще можно безопасно отключить? Будем разбираться!

      Разбираемся

      Microsoft .NET Framework NGEN — служба, работающая под процессом mscorsvw.exe. Теоретически может ускорять работу программ, для которых необходима среда .NET Framework.

      Информации в интернете мало. То что относится к .NET Framework — это и так понятно. Однако упоминание в названии NGEN — скорее всего не просто так..

      Вообще NGEN расшифровывается вроде как Native Image Generator, вот инфа с вики:

      Если вы точно уверены, что Windows у вас исправна, то можно разрешить службе выполнить свою работу, для этого используйте команду:

      %WinDir%\Microsoft.NET\Framework\v4.0.30319\ngen.exe update /force /queue

      Если винда 64-бит добавьте в пути 64 к слову Framework. Пусть сделает то что ей нужно — грузить ПК может пару часов, если не остановится — делайте перезагрузку. Если остановится, и после этого снова иногда будет вызывать нагрузку — пробуйте исправить командой ниже либо отключайте ее вообще. Команду нашел на форуме — надеюсь работает.

      У некоторых пользователей данная служба вызывала долгую загрузку винды, также тормоза были и после запуска. Тормоза могут быть связаны с сетью, происходит какой-то конфликт между службой и сетевыми процессами.. на форуме OSzone авторитетный юзер предложил выполнить команду в командой строке:

      Тут также, если винда 64-битная — добавьте 64 к слову Framework.

      При проблемах со службой, а также вообще с Фраемворком — можно воспользоваться офф инструментом Microsoft .NET Framework Repair Tool. Правда исправит ли ошибки — гарантии нет, но все таки его предлагает сама компания Майкрософт, поэтому можно и попробовать… вот офф ссылка, внешний вид программы:

      У одного чела не запускался фаервол. И в этом была виновата служба NGEN. Как видим — реально может создавать разные проблемы((

      Еще вроде как имеет свои задания в планировщике по этому адресу:

      Библиотека планировщика заданий > Microsoft > Windows > .NET Framework

      Тип запуска

      На офф форуме Майкрософт говорится — лучше чтобы служба имела тип запуска вручную:

      Быстро открыть список служб можно так: зажимаете Win + R, пишите команду services.msc и нажимаете ОК.

      Хотя один юзер написал — служба однократно грузит ПК, проводит там какую-то работу, и после этого уже тормозов не будет. Но.. увы.. кажется у многих это происходит далеко не однократно((

      Можно ли отключать?

      В принципе, как я понимаю — служба не основная. Она вроде как нужна именно для ускорения работы некоторых программ. Во-вторых отключение — действие, которое можно всегда исправить.

      Поэтому не вижу причин чтобы не попробовать отключить. Внимание! На всякий случай перед отключением можно создать точку восстановления:

      1. Зажимаете Win + R, пишите команду sysdm.cpl, далее нажимаете ОК.
      2. Появится окошко, активируйте вкладку Защита системы.
      3. Выбираете системный диск. Нажимаете Создать. Если кнопка создать неактивна — нажимаете настроить и включаете защиту системы. Нажали создать > пишите название, советую назвать например До отключения NGEN.
      4. После создания точки уже можно службу отключать, а также при необходимости провести еще некоторые эксперименты, в случае проблем — при помощи точки вернетесь в прошлое))

      Теоретически если процесс mscorsvw.exe грузит ПК — то отключение службы тоже может помочь..

      Нашел полезную инфу:

      Вывод

      1. Мы точно не смогли выяснить зачем нужна служба. Но предположительно — для ускорения работы программ, для которых нужна среда .NET Framework.
      2. Вероятно всего — можно отключить. При проблемах — включите обратно. Точка восстановления перед отключением не помешает.

      Надеюсь информация помогла. Удачи и добра!

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *