0

我正在使用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?也许我没有正确管理线程?

4

1 回答 1

-2

问题似乎是高CPU。根据:

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

当 CPU 超过 80% 时,新线程将挂起。

于 2015-02-15T10:23:29.630 回答