我正在使用 ThreadPool 对 1000 个工作项进行排队
While(reading in data for processing)
{
args = some data that has been read;
ThreadPool.QueueUserWorkItem(new WaitCallback(threadRunner), args);
}
然而,这种方法工作得很好,因为主线程对请求进行排队的速度比处理请求的速度要快,所以内存会慢慢被耗尽。
我想做类似于以下的事情来随着队列的增长来限制排队
Thread.Sleep(numberOfItemsCurrentlyQueued);
随着队列的增长,这将导致等待时间更长。
有没有办法知道队列中有多少项目?
生产者/消费者队列的更易于管理的抽象是BlockingCollection<T>。那里的示例代码展示了如何使用任务来播种和排出队列。队列计数可以通过以下方式轻松获得Count
财产。
如果可以的话,避免使用Sleep
推迟更多物品的生产。当队列变得太大时,让生产者等待事件或类似事件,并在队列积压达到允许生产更多项目的阈值时让消费者发出事件信号。始终尝试让事情由事件驱动 -Sleep
有点猜测。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)