Утечка памяти при использовании.NET ThreadPool

Я использую System.Threading.ThreadPool.QueueUserWorkItem() для запуска своих задач.

При запуске моего приложения я заметил, что оно занимает много памяти, и я взял файл дампа с помощью диспетчера задач. Исследуя его, я обнаружил, что многие потоки застряли в следующем стеке:

ntdll!NtWaitForSingleObject+a 
KERNELBASE!WaitForSingleObjectEx+79 
mscorwks!CLREvent::WaitEx+174 
mscorwks!CLREvent::WaitEx+63 
mscorwks!ThreadpoolMgr::SafeWait+7b 
mscorwks!ThreadpoolMgr::WorkerThreadStart+11a 
mscorwks!Thread::intermediateThreadProc+78 
kernel32!BaseThreadInitThunk+d 
ntdll!RtlUserThreadStart+1d 

или же

ntdll!NtWaitForWorkViaWorkerFactory+a 
ntdll!TppWorkerThread+2c9 
kernel32!BaseThreadInitThunk+d 
ntdll!RtlUserThreadStart+1d 

Почему эти темы застряли? Я использую неправильный API? Может я не правильно управляю потоками?

1 ответ

Решение

Кажется, проблема в высокой загрузке процессора. В соответствии с:

http://blogs.msdn.com/b/tess/archive/2008/02/27/net-debugging-demos-lab-4-high-cpu-hang-review.aspx

Когда загрузка процессора превышает 80%, новые потоки будут отложены.

Другие вопросы по тегам