我使用sharpPacp接收udp数据包,当打包到达时,我使用BackgroundThread来处理收到的打包如下:
private void BackgroundThread()
{
while (!BackgroundThreadStop)
{
bool shouldSleep = true;
lock (QueueLock)
{
if (PacketQueue.Count != 0)
{
shouldSleep = false;
}
}
if (shouldSleep)
{
System.Threading.Thread.Sleep(250);
}
else // should process the queue
{
//List<RawCapture> ourQueue;
List<UdpPacket> ourQueue;
lock (QueueLock)
{
// swap queues, giving the capture callback a new one
ourQueue = PacketQueue;
PacketQueue = new List<UdpPacket>();
}
//I write my repeatable work in here
Task.Factory.StartNew(() =>
{
ProcePacket(ourQueue);
});
if (statisticsUiNeedsUpdate)
{
UpdateCaptureStatistics();
statisticsUiNeedsUpdate = false;
}
}
}
}
其中ProcePacket(ourQueue)是一个需要很长时间才能完成的。 我的程序运行了一段时间,然后cpu几乎使用了98%,内存增加到很多,最后它死了。 我认为问题是我创建了太多任务,但是如何只用一个任务进行可重新编写的工作呢?