0
“N”线程同时工作TPL我观察到的一个问题内存中变疯了。我想明白为什么我们有这样的行为。为什么如果通过第三方物流创造了的EventWaitHandle
这是一个简单的示例代码。假设我们有一个生产者在产生数据时发出信号。在这个方法中,我们创建了'N'个消费者。
public void StartMultiConsumers()
{
//// main processor thread..
while (true)
{
Task.Factory.StartNew(() =>
{
wh.WaitOne(); // causes the memory to grow crazy high
wh.Reset();
});
}
}
我知道我们可以改进代码,以便我们不创建无限数量的线程。但是由于TPL只能创建少量的线程。为什么我们有这样的行为。
w.WaitOne()
导致内存增长的疯狂高。但为什么?
但是当我检查到任务管理器我很难得到像14线程的数量因此,这意味着,有没有那么多的线程或任务管理器不显示线程是否正确? – 2014-11-25 05:32:10
也不是导致内存高的WaitOne()方法导致内存的线程数。所以如果我评论这条线,尺寸没有太大的变化。 – 2014-11-25 05:33:55
@DJ等待一个不会导致大内存使用率,这是你在线程中做的阻塞调用。你可以用'Thread.Sleep(10000)'代替WaitOne并看到相同的效果。 – 2014-11-25 06:51:34