Изменить Thread.Priority, чтобы сделать программу более отзывчивой - PullRequest
2 голосов
/ 31 июля 2011

Я написал приложение .net winforms, которое выполняет тяжелую обработку и значительно замедляет мой компьютер.Я прочитал кое-что о

Thread.CurrentThread.Priority

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

Спасибо.

Ответы [ 4 ]

5 голосов
/ 31 июля 2011

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

Чтобы сохранить отзывчивость пользовательского интерфейса, не выполняйте никакой тяжелой обработки в этом потоке - выполняйте работу в фоновом потоке.

Возможно, это немного расплывчато, но если так, то ваш вопрос.Рады вдаваться в подробности, если вы тоже можете.Надеюсь, это поможет!

1 голос
/ 31 июля 2011

Да, это решит вашу проблему. Установите для него значение ThreadPriority.BelowNormal (или Lowest), и любой поток, запущенный другими процессами на вашей машине, будет запланирован раньше, чем ваш рабочий поток. Это заметно делает любую программу, которую вы используете в интерактивном режиме, более быстрой. Следствием этого является то, что ваш рабочий поток может голодать на время процессора, когда другой процесс записывает процессор. Время от времени оно будет запускаться, но не очень часто.

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

0 голосов
/ 31 июля 2011

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

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

Что вам нужно сделать, это пересмотреть вашу обработку, возможно, добавить потоки (или несколько потоков) или подумать, как обработка может быть улучшена другими способами. Prioirty это не ответ.

0 голосов
/ 31 июля 2011

Если вы испытываете общее «замедление» и «отставание», то повышение приоритета любого отдельного потока только ухудшит ситуацию.

Это точно зависит от того, как структурировано ваше приложение, но если у вас идет интенсивная обработка, и она использует достаточно процессорного времени, чтобы оказать негативное влияние на остальную часть системы, тогда у вас есть два основных варианта:

  1. Уменьшите приоритет потоков обработки, чтобы активность в остальной части системы имела приоритет.
  2. Ввести искусственные разрывы в потоке обработки. Обычно это делается путем регулярной отправки потока в спящий режим или передачи другим потокам или цикла обработки событий.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...