.NET 런타임 최적화 서비스가 배터리에서 실행되지 않도록 하시겠습니까? 한 후) 스스로 재부팅되었습니다. 이제 .NET Runtime

오늘 아침에 랩탑을 열었을 때, (업데이트를 설치 한 후) 스스로 재부팅되었습니다. 이제 .NET Runtime Optimization Service (ngen?)는 컴퓨터가 배터리를 사용하는 동안 상당히 많은 CPU를 사용하고 있습니다. 궁금합니다. 랩톱이 연결될 때까지 Windows에서 이러한 작업을 연기하도록 요청할 수있는 방법이 있습니까? 랩탑을 밤새 꽂았지만 1 시간 미만 사용한 후에 배터리의 30 %가 사라 졌는데 이는 일반적인 상황이 아닙니다.

내 컴퓨터 가이 작업을 수행하는 동안 유휴 상태가 아니 었 으므로이 기사에서 .Net Framework 업데이트 후 우선 순위가 높은 어셈블리를 컴파일한다고 가정합니다 .

Windows 업데이트 기록을 확인한 후 플러그를 꽂고 밤새 누적 업데이트를 설치했습니다 ( https://support.microsoft.com/en-ie/help/4038788/windows-10-update-kb4038788 ). 배터리로 노트북을 사용하기를 기다리는 대신 Windows가 해당 프로세스의 일부로 .net 최적화를 실행하기를 바랍니다.

작업 관리자



답변

짧은 대답은 아니요, ngen을 안정적으로 연기 할 수 없으며 (시도해서는 안됩니다), 내가 찾은 일관되고 유용한 옵션은 완료되도록 강제하고 백그라운드에서 숨어 있지 않도록하는 것입니다.

배터리에 일부 CPU주기를 저장하려는 경우 (또는 필자의 경우 Windows 업데이트 후 서비스로 돌아온 후 서버가 ngen을 실행하지 못하게하는 경우) 가장 좋은 방법은 ngen을 강제로 실행하는 것입니다. 데스크탑 PC의 경우 두 가지 옵션이 있습니다.

  1. 아래에 적절한 ngen 명령을 사용하여 바탕 화면에 .bat 또는 .ps1 파일을 만듭니다. 플러그를 뽑기 전에 ngen이 두 번 클릭되어 닫힐 때까지 기다리십시오. 대신 Windows 폴더에 스크립트를 작성하고 바탕 화면에 바로 가기 스크립트를 작성하는 경우 명령 또는 Powershell 프롬프트 또는 실행 대화 상자를 사용하여 필요에 따라 스크립트를 실행할 수도 있습니다 (업데이트를 뽑거나 업데이트하기 전).

  2. 작동해야하는 다른 옵션은 예약 된 작업을 사용하여 위 스크립트를 실행하는 것입니다. 시작시 로그온 한 사용자없이 관리자 권한으로 실행하십시오. 랩탑이 밤새 업데이트를 설치할 수 있고 재부팅 할 수 있다면 잘 작동합니다.

ngen을 실행하려면 다음 명령 중 하나만 있으면됩니다. 시스템에 가장 적합한 첫 번째 / 가장 적합한 옵션을 사용하십시오.

  • 64 비트에서 .Net 4 이상
    C:\Windows\Microsoft.NET\Framework64\v4.0.30319\ngen.exe executeQueuedItems

  • 32 비트에서 .Net 4 이상
    C:\Windows\Microsoft.NET\Framework\v4.0.30319\ngen.exe executeQueuedItems

  • 64 비트의 .Net 3 이하
    C:\Windows\Microsoft.NET\Framework64\v2.0.50727\ngen.exe executeQueuedItems

  • 32 비트에서 .Net 3 이하
    C:\Windows\Microsoft.NET\Framework\v2.0.50727\ngen.exe executeQueuedItems

다음은 대기열에있는 항목이 없을 때 ngen에서 얻는 최소 출력입니다.

PS C:\Users\Administrator> C:\Windows\Microsoft.NET\Framework64\v4.0.30319\ngen.exe executeQueuedItems
Microsoft (R) CLR Native Image Generator - Version 4.6.1586.0
Copyright (c) Microsoft Corporation.  All rights reserved.
All compilation targets are up to date.

ngen.exe를 실행하면 executeQueuedItems모든 보류중인 작업을 가능한 빨리 수행해야합니다. 일반적으로 ngen은 낮은 우선 순위의 백그라운드 스레드에서 실행되며 분명히 무작위로 시작됩니다. 다른 아이디어는 CPU의 다른 프로세스를 굶어서는 안되지만 항상 작동하지는 않습니다. ngen을 대화식으로 실행하면 백그라운드에서 실행하는 것보다 빠르지 만 성능에 더 많은 영향을 미칩니다. 소요 시간은 하드웨어 및 재 컴파일이 필요한 네이티브 이미지 수 / 수에 따라 다릅니다.