.NET Thread.Как ограничить использование процессорного времени - PullRequest
0 голосов
/ 08 июля 2011

Существуют ли способы уменьшить использование процессорного времени для неосновного потока в среде .NET.Поток используется для получения информации с веб-сервера все время и занимает все одноядерное процессорное время.Я знаю, что могу использовать Thread.Sleep (), но это не кажется хорошим решением для этой задачи.

Ответы [ 2 ]

2 голосов
/ 08 июля 2011

Не работает с приоритетами и т. Д. Если у вас есть 1 поток в вашей системе, который говорит: «У меня есть работа, позвольте мне работать», и нет других конкурирующих потоков, окна будут продолжать его планировать.

Вы указываете, что этот поток получает информацию с веб-сервера. Предположительно, он, по крайней мере, блокируется во время ожидания ответа от сервера, так что, надеюсь, не использует CPU в это время. К сожалению, это звучит так, как будто вы опрашиваете информацию, поэтому Thread.Sleep может быть лучше здесь - если только нет какого-то другого внеполосного сигнала, который мог бы сообщить потоку, когда он должен сделать следующий опрос.


Если веб-сервер «знает», когда поток должен выполнить следующий опрос, можно надеяться, что он может быть изменен для включения такой информации в свои ответы. Затем вы можете извлечь эту информацию из ответа и, по крайней мере, установить для ваших Sleep периодов подходящее значение.

В качестве альтернативы, если другой поток получит информацию из другого места, которая указывает, что должен быть выполнен новый запрос, тогда вместо Thread.Sleep следует использовать Событие (например, AutoResetEvent) и WaitOne для этого сигнала, снова указав подходящий период ожидания. Таким образом, что-то еще может разбудить эту спящую нить всякий раз, когда они думают, что опрос должен снова произойти.

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

Вы можете изменить приоритет фоновых потоков

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...