【发布时间】:2026-01-11 14:10:01
【问题描述】:
我有一项服务需要永久运行才能监控一台服务器。为此,我有 5 个任务需要服务完成(目前有 5 个,将有数百个)。
我创建了一个最多有 5 个线程的线程池。线程使用队列来获取任务,然后每个线程处理任务,然后再次将其入队。队列包含具有 5 个小属性的对象。
服务运行一段时间后,我在执行此操作的行收到 OutOfMemoryException:
ThreadPool.QueueUserWorkItem(currentJob.ProcessJob, (object)timeToWwait);
timeToWwait 是一个 int,我不再使用它了。
上下文是这样的:
ThreadPool.SetMinThreads(0, 0);
ThreadPool.SetMaxThreads(5, 5);
while (true)
{
bool processJob = false;
bool checkedFrontEnd = false;
_qLock.EnterWriteLock();
try
{
if (_jobQueue.Count > 0)
{
currentJob = _jobQueue.Dequeue();
// currentJob.IsActive = true;
// processJob = true;
}
}
finally
{
_qLock.ExitWriteLock();
}
ThreadPool.QueueUserWorkItem(currentJob.ProcessJob, (object)timeToWwait);
//currentJob.ProcessJob((object)timeToWwait);
_qLock.EnterWriteLock();
try
{
_jobQueue.Enqueue(currentJob);
}
finally
{
_qLock.ExitWriteLock();
}
请问您有什么建议吗?
【问题讨论】:
-
请参阅常见问题解答,了解在您的问题中包含签名和在标题中包含标签。我已经修复了两次,但我从中获得的 2 个代表不值得再做一次。
标签: c# multithreading threadpool out-of-memory