ngen.exe высокая загрузка процессора windows 10 - Сборки удаляют бесконечный цикл

ngen.exe высокая загрузка процессора windows 10 - Сборки удаляют бесконечный цикл

Всякий раз, когда я оставляю компьютер бездействующим на несколько минут, я возвращаюсь и мой Process Explorer показывает, что «ngen.exe» запущен и занимает 2 из 4 моих процессоров.

Вопрос: Есть ли способ отключить NGEN.exe как фоновую задачу?

Я хотел бы (как и многие другие в Интернете) скомпилировать все двоичные файлы .net сразу, вместо того, чтобы компьютер делал это «автоматически» каждый раз, когда я оставляю компьютер без дела. Я проверил все форумы Microsoft, и пока никто не дал полного ответа на эту проблему, и у многих возникли те же проблемы.

Видимо, необходимо перекомпилировать какую-то библиотеку в .net framework, и она «зависает», перегружает процессор и снова и снова зацикливается.

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

Regedit /HKLM/SOFTWARE/Microsoft/Windows/Current Version/RUN не имеет записи для запуска компилятора .net. Что-то еще должно вызывать запуск ngen.exe.

Может ли кто-нибудь опубликовать другие места, которые могут вызывать эту ошибку?

Я бы хотел отключить его, как, я уверен, и многие другие. Я также отключил автоматические обновления в Windows 10.

ОБНОВЛЕНИЕ: Process Explorer сообщает, что запущено следующее:

"C:\Windows\Microsoft.NET\Framework64\v4.0.30319\ngen.exe" удалить "C:\WINDOWS\assembly\NativeImages_v4.0.30319_64\Microsoft.Vf‌​9a08577#\328b1bc4205‌​c08821860805bf5e6c99‌​e\Microsoft.VisualSt‌​udio.Tools.Applicati‌​ons.Hosting.ni.dll" /noroot /LegacyServiceBehavior – Виктор 5 мин назад

"C:\Windows\Microsoft.NET\Framework\v4.0.30319\ngen.exe" удалить "C:\WINDOWS\assembly\NativeImages_v2.0.50727_32\Presentation‌​Framewo#\7fa93028119‌​b98117acfd5ea18f15c1‌​3\PresentationFramew‌​ork.ni.dll" /noroot /LegacyServiceBehavior – Виктор 4 мин назад изменить

"C:\Windows\Microsoft.NET\Framework64\v4.0.30319\ngen.exe" удалить "C:\WINDOWS\assembly\NativeImages_v2.0.50727_64\Microsoft.PowerShel#\23dfb41f48958215c80bbbc0c9177cb2\Microsoft.PowerShell.Commands.Utility.ni.dll" /noroot /LegacyServiceBehavior

Он продолжает работать снова и снова и снова. - это вывод Process Explorer. Это очень раздражает и, кажется, это происходит КАЖДЫЙ РАЗ, КОГДА я встаю со своего стола.

ВОПРОС: похоже, что это легитимные процессы. Кто-нибудь знает способ вручную удалить эти команды удаления и полностью скомпилировать .net framework один раз, вместо того, чтобы зацикливаться снова и снова?

В ТЕКУЩЕМ ПРОЦЕССЕ: Я убил процесс и ngentask.exe, затем перешел в Windows\assembly и переместил эти папки Native Image во временный каталог. Я буду держать вас в курсе, если он снова запустится. Скорее всего, если папки NativeImages отсутствуют, он не будет пытаться продолжать удалять эти сборки.

решение1

Загрузите простой скрипт NGEN, запустите его от имени администратора и выберите опцию 1, чтобы выполнить полный запуск ngen:

введите описание изображения здесь

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

(Если ссылка не работает, скопируйте и вставьте код в текстовый файл и переименуйте его в cmd):

@echo off
title Easy Ngen Runner v5 for '.NET 4.x series' by Burf

"%windir%\system32\reg.exe" query "HKU\S-1-5-19" >nul 2>&1 && (
goto :admincheckok
) || (
echo      -------
echo  *** WARNING ***
echo      -------
echo.
echo.
echo ADMINISTRATOR PRIVILEGES NOT DETECTED!
call :line
echo.
echo.
echo This script must be run with administrator privileges!
echo.
echo To do so, right click on this script and select 'Run As Administrator'
echo.
goto :fin
)

:admincheckok

"%windir%\system32\reg.exe" query "hklm\software\microsoft\Windows NT\currentversion" /v buildlabex >"%temp%\os.txt"
find /i "AMD64" <"%temp%\os.txt">nul
if %errorlevel% equ 0 (set arch=x64) else (set arch=x86)

for /f "tokens=3* delims= " %%G in ('reg query "hklm\software\microsoft\Windows NT\currentversion" /v productname') do (set winv=%%G %%H)
echo %winv%|find /i "Windows 10" >nul
if errorlevel 0 (set w10=1&for /f "tokens=3" %%G in ('reg query "hklm\software\microsoft\Windows NT\currentversion" /v UBR') do (set /a UBR=%%G))
if defined w10 (for /f "skip=2 tokens=3,4,6,7 delims=. " %%G in ('type "%temp%\os.txt"') do (set "win=%winv% %arch% Build %%G.%UBR% {%%I %%J}")
) else (
for /f "skip=2 tokens=3,4,6,7 delims=. " %%G in ('type "%temp%\os.txt"') do (set "win=Legacy %winv% %arch% Build %%G.%%H {%%I %%J}")
)
del "%temp%\os.txt"

if not exist "%windir%\Microsoft.NET\Framework\v4.0.30319" goto :notinstalled

:menu
call :title
echo.
echo 1. Run full Ngen 'update' task
echo.
echo 2. Run standard Ngen 'update' task
echo.
echo 3. Execute queued Ngen items (what Windows does in background)
echo.
echo 4. Visit the 'homepage' of Burf:
echo    (http://1drv.ms/1oVTfju)
echo.
echo 5. Information
echo.
echo 6. Exit
echo.
echo. 
echo.
choice /c 123456 /N /M "Please enter your selection> "
if errorlevel 6 goto :eof
if errorlevel 5 goto :info
if errorlevel 4 start http://1drv.ms/1oVTfju&goto :menu
if errorlevel 3 goto :ngub
if errorlevel 2 goto :ngus
if errorlevel 1 goto :nguf


:info
call :title
echo This script allows your to easily run the .NET Framework tool Ngen
echo (Native Image Generator) program.
echo.
echo The three options in the menu represent the three different methods in
echo which is can be run:
echo Menu option 1 - Recreates all images
echo Menu option 2 - Processes images that have become invalid
echo Menu option 3 - Execute items already in queue to be processed by Windows
echo.
echo Option 1 is really only beneficial after a .NET Framework or a major Windows
echo update has been installed. Option 3 executes those items already in the
echo queue, this just processes the items immediately instead of during idle
echo processor time.
echo.
echo Option 2 should be used for general use, option 1 after a .NET Framework
echo or major Windows update (including Insider Previews), and option 3 is
echo only provided for completeness of this script. It is the 'least useful'.
echo.
echo It makes sense to have queued items processed and native images updated
echo before they are actually required!
echo.
echo.
echo Press any key to return to menu...
pause >nul
goto :menu


:nguf
call :title
echo Running x86 update item task. Some 'errors' may show, this is expected.
call :line
echo.
"%windir%\Microsoft.NET\Framework\v4.0.30319\ngen.exe" update /force
if defined task (
"%windir%\Microsoft.NET\Framework\v4.0.30319\ngentask.exe" /runtimewide
)
echo.
if %arch% equ x86 (goto :nudone)
echo.
echo Now running x64 update item task. Some 'errors' may show, this is expected.
call :line
echo.
"%windir%\Microsoft.NET\Framework64\v4.0.30319\ngen.exe" update /force
if defined task (
"%windir%\Microsoft.NET\Framework64\v4.0.30319\ngentask.exe" /runtimewide
)
goto :nudone


:ngus
call :title
echo Running x86 update item task. Some 'errors' may show, this is expected.
call :line
echo.
"%windir%\Microsoft.NET\Framework\v4.0.30319\ngen.exe" update
if defined task (
"%windir%\Microsoft.NET\Framework\v4.0.30319\ngentask.exe" /runtimewide
)


echo.
if %arch% equ x86 (goto :nudone)
echo.
echo Now running x64 update item task. Some 'errors' may show, this is expected.
call :line
echo.
"%windir%\Microsoft.NET\Framework64\v4.0.30319\ngen.exe" update
if defined task (
"%windir%\Microsoft.NET\Framework64\v4.0.30319\ngentask.exe" /runtimewide
)
goto :nudone


:ngub
call :title
echo Running x86 update item task. Some 'errors' may show, this is expected.
call :line
echo.
"%windir%\Microsoft.NET\Framework\v4.0.30319\ngen.exe" executequeueditems
if defined task (
"%windir%\Microsoft.NET\Framework\v4.0.30319\ngentask.exe" /runtimewide
)


echo.
if %arch% equ x86 (goto :nudone)
echo.
echo Now running x64 update item task. Some 'errors' may show, this is expected.
call :line
echo.
"%windir%\Microsoft.NET\Framework64\v4.0.30319\ngen.exe" executequeueditems
if defined task (
"%windir%\Microsoft.NET\Framework64\v4.0.30319\ngentask.exe" /runtimewide
)
goto :nudone


:nudone
echo.
echo.
echo Done! Please note that some 'errors' may have appeared. These are, for the
echo most part, not unexpected and are not deemed critical.
echo.
goto :fin


:title
cls
echo -----------------------------------------
echo Easy Ngen Runner v5 for '.NET 4.x' series by Burf
echo -----------------------------------------
echo %win%
echo.
goto :eof


:fin
echo.
echo Press any key to exit...
pause >nul
goto :eof


:notinstalled
echo Microsoft .NET Framework 4, 4.5, 4.6, or 4.7 NOT detected. Please install before
echo using this script. If already installed, something may be 'wrong'...
goto :fin


:line
echo ____________________________________________________________________________
goto :eof

решение2

Удаление ключа в реестре — вот что мне в конце концов помогло. Проблема была в том, что ngen пытался снова и снова перераспределять память для одной и той же поврежденной DLL в реестре. В конечном итоге это израсходовало бы всю доступную память на компьютере.

Удаление ключа "\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft.NETFramework\v2.0.50727\NGenService\Roots" помогло мне. Остановка запланированной задачи или завершение ngen.exe — это лишь временная мера, которая не решает проблему.

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

Более подробную информацию о проблеме можно найти здесь.https://aloiskraus.wordpress.com/2017/12/13/the-case-of-ngen-exe-needing-50-gb-of-memory/

решение3

это сработало для меня, я запустил проверку на вирусы после того, как сделал все, о чем люди говорили в Интернете, и она сразу же вернулась. Там был вирус в виде файла .dll с именем .netframework, оказалось, что это был вирус майнинга процессора, надеюсь, это поможет.

Связанный контент