使用 .NET ThreadPool 时发生内存泄漏
Memory leak when using .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 吗?也许我没有正确管理线程?
这个问题似乎很高CPU。根据:
http://blogs.msdn.com/b/tess/archive/2008/02/27/net-debugging-demos-lab-4-high-cpu-hang-review.aspx
当 CPU 超过 80% 时,新线程将挂起。
我正在使用 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 吗?也许我没有正确管理线程?
这个问题似乎很高CPU。根据:
http://blogs.msdn.com/b/tess/archive/2008/02/27/net-debugging-demos-lab-4-high-cpu-hang-review.aspx
当 CPU 超过 80% 时,新线程将挂起。