У меня есть служба, которая должна работать вечно, чтобы контролировать один сервер. Для этого у меня есть 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();
}
У вас есть предложения, пожалуйста?