Windows 7: Планировщик заданий/движок сокращает рабочий набор/память приложений. Можно ли это как-то остановить?

Windows 7: Планировщик заданий/движок сокращает рабочий набор/память приложений. Можно ли это как-то остановить?

Я пытаюсь автоматически запускать некоторые скрипты Auto-HotKey с помощью планировщика заданий, поскольку он позволяет запускать скрипты с правами администратора без запроса UAC.

Обычно скрипты терпят неудачу через несколько часов. При запуске через папку UAC/explorer.exe/startup все эти скрипты работают несколько дней. (Единственный, который я видел работающим надежно через планировщик заданий, — это простой скрипт, который выводит всплывающее окно с сообщением «Hello World».)

Используя Process Explorer, я заметил, что у дочерних процессов taskeng.exe размер рабочих наборов всегда уменьшался (примерно с 3000 КБ до 512 КБ), в то время как у дочерних процессов UAC/explorer.exe он оставался неизменным.

Я попробовал использовать код AHK, чтобы посмотреть, можно ли изменить размер рабочего набора:

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

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


Решением было скомпилировать исполняемый файл как 64-битный вместо 32-битного. Я не пробовал этого раньше, потому что 32-битная версия прекрасно работала через папку «Автозагрузка» в течение месяцев, которые я ее использовал.

Я считаю, что проблема возникла из-за того, что keyboard-hook загружался в память, а затем выгружался во время сборки мусора. Это затронуло только горячие клавиши, назначенные keyboard-hook, а не те, которые были назначены с помощью RegisterHotkey.

Я использую 64-битные исполняемые файлы уже больше недели, и ни один из них не дал сбоев, хотя некоторые немного медленно реагировали (возможно, это связано с фоновыми процессами или потреблением ресурсов Chrome). Завершение или перезапуск родительских процессов taskeng.exe и svchost может решить эту проблему, поскольку это единственный способ, который я нашел, чтобы остановить перераспределение рабочего набора (все еще не решило проблему 32-битных, а завершение родительского svchost создало несколько новых проблем).

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

Чтобы изменить приоритет:

  1. Экспортируйте задачу как XML-файл.
  2. Отредактируйте XML-файл и измените тег Priority. Смотретьэта страницадля списка приоритетов.
  3. Установите StopOnIdleEnd на «false». (Я не проверял это, но это могло вызывать задержку мыши/ввода.)
  4. Импортируйте измененный XML-файл как задачу, и это должно заработать.

Повышение приоритета таким образом также увеличивает приоритет памяти и ввода-вывода.

Может потребоваться компиляция скриптов AHK как 64-битных.

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