Windows 7: O Agendador/Motor de Tarefas reduz o Conjunto de Trabalho/memória dos aplicativos. Existe alguma maneira de impedir isso?

Windows 7: O Agendador/Motor de Tarefas reduz o Conjunto de Trabalho/memória dos aplicativos. Existe alguma maneira de impedir isso?

Tenho tentado iniciar automaticamente alguns scripts Auto-HotKey usando o Agendador de tarefas, pois ele permite que os scripts sejam executados com privilégios de administrador sem um prompt do UAC.

Geralmente, os scripts falham após várias horas. Quando executados por meio da pasta UAC/explorer.exe/startup, todos esses scripts foram executados por vários dias. (O único que vi funcionar de forma confiável por meio do Agendador de Tarefas é um simples que exibe uma caixa de mensagem "Olá, Mundo".)

Ao usar o Process Explorer, noto que os processos filhos taskeng.exe sempre tiveram seus conjuntos de trabalho reduzidos em tamanho (de aproximadamente 3.000 K para 512 K ou mais), enquanto os processos filhos UAC/explorer.exe permaneceram constantes.

Tentei usar algum código AHK para ver se ele poderia alterar o tamanho do conjunto de trabalho:

pid := DllCall("GetCurrentProcessId")
handle := DllCall("OpenProcess", "UInt", 0x001F0FFF, "Int", 0, "Int", pid)
DllCall("SetProcessWorkingSetSize", "UInt", handle, "Int", 10000000, "Int", 20000000)
DllCall("CloseHandle", "Int", handle)

Não pareceu funcionar, então não tenho certeza se há alguma solução para o problema.


A solução foi compilar o executável como 64 bits em vez de 32 bits. Eu não tinha tentado isso antes porque a versão de 32 bits funcionou perfeitamente através da pasta Inicializar durante os meses em que a usei.

Acredito que o problema resultou do carregamento do gancho do teclado na memória e descarregamento durante a coleta de lixo. Apenas as teclas de atalho atribuídas ao gancho do teclado foram afetadas, e não aquelas atribuídas usando RegisterHotkey.

Estou usando os executáveis ​​de 64 bits há mais de uma semana e nenhum falhou, embora alguns tenham demorado um pouco para responder (pode ter algo a ver com processos em segundo plano ou com o consumo de recursos do Chrome). Eliminar ou reiniciar os processos pai taskeng.exe e svchost pode resolver esse problema, pois foi a única maneira que encontrei de interromper a realocação do conjunto de trabalho (ainda não corrigiu o problema de 32 bits e matar o svchost pai criou alguns novos problemas ).

[Atualização 03/10/2018: basicamente resolvi o problema.] O Agendador de tarefas pode definir tarefas para serem executadas em prioridades diferentes, mas a interface do usuário não mostra isso.

Para alterar a prioridade:

  1. Exporte a tarefa como um arquivo XML.
  2. Edite o arquivo XML e altere a tag Priority. Veresta páginapara uma lista de prioridades.
  3. Defina StopOnIdleEnd como "falso". (Não testei isso, mas pode estar causando atraso no mouse/entrada.)
  4. Importe o arquivo XML modificado como uma tarefa e ele deverá funcionar.

Aumentar a prioridade dessa maneira também aumenta a memória e a prioridade de E/S.

A compilação de scripts AHK como 64 bits ainda pode ser necessária.

informação relacionada