Программно ограничьте Использование ЦП выполнения Потока в Сервисе

$('.datepicker, #element_ajoute').datetimepicker({
            format : "DD/MM/YYYY",
            showClose : true,
            locale : 'it',
            showClear : true,
            ignoreReadonly : true,
            maxDate : new Date()
})
8
задан user57175 27 January 2009 в 08:01
поделиться

4 ответа

Можно уменьшить приоритет потока в .NET через Поток. Приоритет

Установка его к BelowNormal будет означать, что другие потоки будут запланированы перед ним.

Это может привести к оголодавшему потоку, но он кажется, что это - приемлемое проектное решение для Ваших потребностей.

Обратите внимание, что, так как Вы выполняете значительный диск IO, это на самом деле будет основным влиянием задней наземной задачи, и можно найти, что сокращение приоритета не достаточно (так как диск IO продолжится в частях даже, в то время как поток регулируют.

Контролирующий поток, который проверяет использование машины (дополнительно заботящийся только, когда по крайней мере один интерактивный пользователь присутствует) мог приостановить индексацию (или значительно отрегулировать IO). Это будет более важно на современных машинах, где существует много доступных ядер (и hyper поточная обработка виртуальных ядер), которые означают, что несмотря на пользователя, на самом деле делающего много ресурсов запчасти работы, существуют, чтобы выполнить Ваш поток индексации, но не действительно выполнить диск IO.

Можно также хотеть рассмотреть, проверяете ли Вы План Питания определить, необходимо ли работать в то время (так как разрядка батареи от обоих тяжелых доступов к диску весьма значительна),

Если Вы хотите сделать еще больше для сокращения влияния этого фона, IO связал версии задачи окон из Vista, вперед добавляют два полезных API:

Низкий приоритет ввод-вывод

Это позволяет Вашему коду планировать ввод-вывод в более низком приоритете, чем другой ввод-вывод.

Windows Task Scheduler

Можно использовать это для планирования вещей работать в "системное время простоя". Это, когда система не занята, и пользователь, не присутствует.

17
ответ дан 5 December 2019 в 07:37
поделиться

Если Вы используете SetThreadPriority API, можно настроить поток для использования более низкого приоритета потока, чем нормальный. Поток будет использовать все доступные ресурсы ЦП, когда система будет неактивна, но оставит процессорное время любым потокам, которые имеют более высокий приоритет.

1
ответ дан 5 December 2019 в 07:37
поделиться

На XP ShuggyCoUk корректен. Первое, что нужно сделать просто ниже приоритет потока к чему-то ниже 8. Это будет означать, что любой другой поток или процесс, который работает с приоритетом 8 или больше, будут всегда работать вместо Вашего потока. Отметьте, я не рекомендую просто установить Ваш приоритет процесса на <8, просто поток (или потоки), Вы хотите работать 'приятно'.

Как Shuggy указал, проблема не он процессорное время - это - ввод-вывод, который генерирует Ваш сервис. На XP весь ввод-вывод рассматривают то же - таким образом, Ваш ввод-вывод имеет потенциал для вмешательства в другие вещи.

Vista (и скоро на Win7) имеет две вещи, разработанные, чтобы сделать точно, что Вы хотите.

Первым является Windows Task Scheduler. Можно использовать это для планирования вещей работать в "системное время простоя". Это, когда система не занята, и пользователь, не присутствует.

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

Оба из них вместе могут использоваться для разработки кода, который является хорошим системным гражданином.

Отметьте, необходимо также принять мобильные системы во внимание путем сокращения или отключения фонового объекта, когда система работает от батарей. Можно быть простыми об этом - простое выключение на заряде батареи; или сложный, принимая Схему Питания во внимание, и с помощью, что как подсказка от пользователя.

Так как Вы работаете над записью сервиса, который является хорошим системным гражданином, можно сделать несколько других вещей также.

1) Вы могли контролировать объем работы, делавшийся со временем, и замедлиться или остановиться, если достаточно успехов было сделано. 2) Действительно обратите внимание на свой объем потребляемой памяти - меньшее лучше. Это часто само собой разумеется, но это конкретно важный для сервисов, поскольку они выполняют 24/7.

3
ответ дан 5 December 2019 в 07:37
поделиться

Большая часть нагрузки в Вашей системе, прибывающей из Вашего процесса индексации, является, вероятно, диском ввод-вывод, таким образом, помимо того, что заявил ShuggyCoUk, если Ваш процесс работает в Vista/Windows Server 2008, можно также изменить диск приоритет ввода-вывода на фон. Это - то, как большая часть подкачки страниц, дефрагментации и другие задачи обслуживания работают над теми системами. В противном случае можно также контролировать диск i/o очередь, чтобы видеть, ожидают ли там операции, прибывающие из взаимодействия с пользователем.

1
ответ дан 5 December 2019 в 07:37
поделиться
Другие вопросы по тегам:

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