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