是否有任何方法可以减少.NET环境中非主线程的处理器时间使用。该线程用于始终从Web服务器获取信息,并且它消耗所有单核处理器时间。我知道我可以使用Thread.Sleep()但它似乎不是一个很好的解决方案。
答案 0 :(得分:2)
弄乱优先事项等,是行不通的。如果你的系统中有1个线程说“我有工作要做,让我工作”,没有其他竞争线程,windows会继续安排它。
您表明此线程正在从Web服务器获取信息。据推测,它在等待服务器响应时至少阻塞,因此希望当时不使用CPU。不幸的是,它确实听起来像是在轮询信息,所以Thread.Sleep
在这里可能是最好的 - 除非有一些其他的带外信号可以告诉线程何时应该下次轮询。
如果Web服务器“知道”线程何时应该进行下一次轮询,则可能希望修改它以在其响应中包含此类信息。然后,您可以从回复中提取该信息,并至少将Sleep
个期间设置为适当的值。
或者,如果另一个线程将从其他地方获取指示应该发出新请求的信息,那么您应该使用事件(例如AutoResetEvent
)和{{3}而不是Thread.Sleep
。在该信号上,再次指定合适的睡眠周期。这样,只要他们认为应该再次进行轮询,其他东西就可以唤醒这个睡眠线程。
答案 1 :(得分:0)
您可以修改后台线程的优先级