Impedir que o .NET Runtime Optimization Service funcione com bateria?


10

Quando abri meu laptop, esta manhã, ele havia se reiniciado (após a instalação das atualizações). Agora, o .NET Runtime Optimization Service (ngen?) Está usando bastante CPU enquanto o computador está com bateria. Gostaria de saber, há alguma maneira de pedir ao Windows para adiar essas tarefas até que o laptop esteja conectado? Eu tive o laptop conectado durante a noite, mas 30% da minha bateria acabou depois de menos de uma hora de uso, o que não é a situação usual.

Como meu computador não estava ocioso enquanto fazia isso, presumo que ele compile os assemblies de alta prioridade após uma atualização do .Net Framework deste artigo .

Verifiquei o histórico de atualizações do Windows e ele instalou uma atualização cumulativa durante a noite enquanto conectado. ( Https://support.microsoft.com/en-ie/help/4038788/windows-10-update-kb4038788 ). Desejo que o Windows execute a otimização .net como parte desse processo, em vez de esperar que eu comece a usar o laptop com bateria.

Gerenciador de tarefas


Acabei de ver o mesmo serviço repentinamente comendo muita CPU e o ventilador ficou alto. Mas, no meu caso, foi depois de colocar o computador em suspensão após 2 horas de uso. Não consegui interromper o serviço (na janela que você postou acima, na visualização de detalhes). Após 5-10 minutos, tudo estava acabado, então eu acho que é apenas uma questão de esperar alguns minutos
Hansaplast

Respostas:


4

A resposta curta é não, você não pode adiar de forma confiável (e não deve tentar), a única opção consistente / útil que encontrei foi forçar a execução até a conclusão e não deixá-la oculta em segundo plano.

Se você está tentando salvar alguns ciclos de CPU na bateria (ou, no meu caso, impedir que um servidor execute o ngen depois de devolvê-lo ao serviço após as atualizações do Windows), sua melhor opção é forçar o ngen a executar você mesmo. Para um PC de mesa, duas opções vêm à mente:

  1. Crie um arquivo .bat ou .ps1 na área de trabalho com o comando ngen apropriado abaixo - basta clicar duas vezes e aguardar o fechamento do ngen antes de desconectar. Se você criar o script na pasta Windows e atalho para ele na área de trabalho, também poderá usar o Prompt de Comando ou Powershell ou a caixa de diálogo Executar para executá-lo conforme necessário (antes de desconectar / após uma atualização).

  2. Outra opção que deve funcionar é usar uma tarefa agendada para executar o script acima. Execute-o na inicialização, sem um usuário conectado, como administrador. Se o seu laptop tiver permissão para instalar atualizações durante a noite e puder reiniciar, isso funcionará bem.

Para executar o ngen, você só precisa de um dos seguintes comandos, use a primeira / mais adequada opção para seu sistema:

  • .Net 4 ou superior em 64 bits C:\Windows\Microsoft.NET\Framework64\v4.0.30319\ngen.exe executeQueuedItems

  • .Net 4 ou superior em 32 bits C:\Windows\Microsoft.NET\Framework\v4.0.30319\ngen.exe executeQueuedItems

  • .Net 3 ou menos em 64 bits C:\Windows\Microsoft.NET\Framework64\v2.0.50727\ngen.exe executeQueuedItems

  • .Net 3 ou menos em 32 bits C:\Windows\Microsoft.NET\Framework\v2.0.50727\ngen.exe executeQueuedItems

Abaixo está a saída mínima que você obtém do ngen quando não há itens na fila:

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.

Quando o ngen.exe é executado, executeQueuedItemsele o forçará a executar todas as tarefas pendentes o mais rápido possível. Normalmente, o ngen roda em um thread de segundo plano de baixa prioridade (e aparentemente inicia apenas aleatoriamente), com a ideia de que não deve passar fome outros processos da CPU - embora isso nem sempre funcione. Executar o ngen interativamente é mais rápido do que deixá-lo em segundo plano - mas afetará mais o desempenho. Quanto tempo leva depende do seu hardware e quantas / quais imagens nativas precisam ser recompiladas.


Se eu deixar minha máquina ociosa (bem, na verdade, uma VM do Virtualbox) por alguns minutos, o ngen.exe começará a consumir toda a CPU. No entanto, se eu executar um ou todos os comandos acima em uma janela de cmd de administrador, rapidamente retornarei "Todos os destinos de compilação estão atualizados". :-( [Ah - talvez eu devesse ter mencionado que essa é uma máquina de desenvolvimento. Gostaria de saber se um processo do Visual Studio está causando problemas ...]
mwardm
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.