Процесс работает медленнее как запланированная задача, чем он делает в интерактивном режиме

Не входя в субъективные оценки о парадигме основными преимуществами PowerShell является интеграция .NET и должность - с сервера Windows 2008 вперед это связывается по умолчанию, и это загружается в обслуживании пакеты на 2 003 и 2 003 R2.

Честно говоря, существует несколько других вариантов для сценариев - например, Perl и Python. Python также дает Вам опцию использования IronPython, если Вы хотите собственную интеграцию .NET. На самом деле IronPython установит удовлетворительно, просто отбросив его в каталоге. Можно тривиально связать его в приложении без потребности в отдельном действии по установке.

Ключевая сила Powershell является чем-то вроде обоюдоострого меча. В то время как потоковая передача объектов .NET довольно полезна и имеет свои преимущества, она помещает намного больше предположений в способность компонентов играть приятно с платформой. Чтобы это действительно работало, необходимо перенести вещи с cmdlets. В то время как текстовый вывод является несколько большим низким уровнем и требует парсинга, он помещает меньше нагрузки в компоненты для проигрывания приятно с платформой.

Со временем я ожидал бы видеть, что намного больше экосистемы Windows (и MS и сторонние компоненты) идет с cmdlet обертками, таким образом, они работают с Powershell. Поскольку это происходит, случай для Powershell станет намного более сильным.

Исторически, одни из ключевых традиционных слабых мест Windows с административной точки зрения были своей плохой поддержкой сценариев. MS распознал это много лет назад и после нескольких хромых попыток (например, WSH), Powershell является самым вероятным усилием MS до сих пор для фиксации того дефицита.

41
задан 16 June 2010 в 21:05
7 ответов

Кажется, что существуют больше, чем просто "регулярный" приоритет процесса на работе здесь. Как я отметил в вопросе, планировщик задач значением по умолчанию выполняет Вашу задачу в ниже, чем нормальный приоритет. Этот вопрос на StackOverflow описывает, как зафиксировать любую задачу работать в Нормальном приоритете, но фиксация все еще оставляет одну вещь немного отличающейся: приоритет памяти. Приоритет памяти был новой возможностью для Windows Vista и описан в этой статье Technet. Вы видите приоритет памяти использовать Проводник Процесса, который является необходимым инструментом для любого администратора или программиста.

Так или иначе, даже с приоритетом запланированной задачи фиксируют, приоритет памяти Вашей задачи установлен на 4, который является одной меткой ниже нормальной установки 5. Когда я вручную повысил приоритет памяти своей задачи до 5, производительность была на одном уровне с выполнением процесса в интерактивном режиме.

Для получения информации о повышении приоритета см. мой ответ на связанный вопрос о StackOverflow о приоритете IO; установка приоритета памяти сделана точно так же через NtSetInformationProcess, с PROCESS_INFORMATION_CLASS набор к ProcessMemoryPriority (значение этого равняется 39 или 0x27). Я мог бы сделать свободную утилиту, которая может использоваться для установки этого, если другие нуждаются в ней и не имеют доступа к инструментам программиста.

Править: Я шел вперед и записал свободную утилиту для того, чтобы запросить и установить приоритет памяти задачи, доступной здесь. Загрузка содержит и исходный код и скомпилированный двоичный файл.

36
ответ дан 28 November 2019 в 19:43

Вот powershell отрывок для установки приоритета (работы на удаленной powershell сессии!):

$taskName = "MyTask" ;`
$currentTask = Get-ScheduledTask -TaskName $taskName ;`
$settings = New-ScheduledTaskSettingsSet ;`
$settings.Priority = 4 ;`
Set-ScheduledTask -TaskName $taskName -Trigger $currentTask.Triggers -Action $currentTask.Actions -Settings $settings -User "NT AUTHORITY\SYSTEM"
0
ответ дан 28 November 2019 в 19:43

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

Если Вы делаете это, это берет дольше, или короче, промежуток времени? Я не знаю то, что это будет означать, но это может быть полезный дифференциатор. Мог быть некоторый доступ к сети, который имеет учетная запись пользователя при входе в систему, но не при выполнении как запланированная задача, для которой нужно к тайм-ауту и сбою? Действительно ли поведение отличается, если Вы создаете новую учетную запись пользователя, и оно работало как запланированная задача в соответствии с той учетной записью?

Другая идея: При выполнении его как запланированной задачи - теперь, когда Вы закрепили приоритет на своем сценарии, подпроцессы все работают как Нормальные, или Ниже-нормального?

1
ответ дан 28 November 2019 в 19:43

Возможно, запланированные задачи, выполненные в более низком приоритете по умолчанию.

Использовать prio вызвать более высокий приоритет.

1
ответ дан 28 November 2019 в 19:43

сначала - можно использовать больше, чем нормальный приоритет (Высоко, например)

во втором - необходимо понять, чем приоритетная сессия берет некоторые ресурсы, главным образом жесткий диск IO и память, таким образом, запланированная задача добирается меньше. для ясного сравнительного теста необходимо выйти из системы в то время как Вы powershell выполнение сценария

и также можно попробовать, добавляют, что больше памяти / использует ramdrive / работа разделения над несколькими жесткими дисками для ускорения процессов

0
ответ дан 28 November 2019 в 19:43

Проблема - то, что Ваш процесс запускается с низкого приоритета ввода-вывода и низкого приоритета памяти. Самый легкий способ проверить это с проводником процесса от sysinternals. При рассмотрении свойств какого-либо из процессов, которые были порождены от этой запланированной задачи, Вы будете видеть, что она имеет приоритет ввода-вывода низких и приоритет памяти 2.

Вот решение этой проблемы:

  1. Создайте задачу
  2. Щелкните правой кнопкой по задаче и "экспортируйте" ее
  3. Отредактируйте файл task.xml, который Вы просто экспортировали
  4. Вы найдете строку подобной <Priority>7</Priority>
  5. Измените значение на нормальный приоритет (между 4-6). Таблица потенциальных ценностей: TaskSettings. Свойство Priority
    • Значение 4 будет иметь тот же ввод-вывод и приоритет памяти как интерактивный процесс. Значения 5 и 6 будут иметь более низкий приоритет памяти
  6. В планировщике задач удалите задачу, которую Вы первоначально создали
  7. В планировщике задач, в области действий, импортируют задачу из XML-файла

К сожалению, нет никакого способа изменить начальный приоритет запланированных задач от GUI.

17
ответ дан 28 November 2019 в 19:43

Этот вопрос был задан некоторое время назад и для Windows Server 2008R2. У меня был тот же вопрос, но для Windows 10. В Windows 10 (проверено на 1703 и 1809) достаточно просто установить «Приоритет» на 4 через импортированный xml, чтобы получить тот же базовый приоритет, динамический приоритет и приоритет ввода-вывода. и приоритет памяти как интерактивно запускаемый процесс.

0
ответ дан 28 November 2019 в 19:43

Теги

Похожие вопросы