在一个环境中,当应用程序停止正常工作时,我们会有某种挂起。我有一个转储,当我在VS中打开它时,我看到我有379个线程。
当我看到那些线程的调用堆栈时,我看到了像
这样的想法ntdll!NtWaitForSingleObject+0xa C/C++/ASM
KERNELBASE!WaitForSingleObjectEx+0x92 C/C++/ASM
clr!CLREventWaitHelper2+0x38 C/C++/ASM
clr!CLREventWaitHelper+0x1f C/C++/ASM
clr!CLREventBase::WaitEx+0x70 C/C++/ASM
clr!AppDomain::ADUnloadThreadStart+0x190 C/C++/ASM
clr!Thread::intermediateThreadProc+0x7d C/C++/ASM
kernel32!BaseThreadInitThunk+0x1a C/C++/ASM
ntdll!RtlUserThreadStart+0x1d C/C++/ASM
所有线程都是普通优先级,并且通过调用堆栈(例如
)具有一些高优先级ntdll!NtWaitForMultipleObjects+0xa C/C++/ASM
KERNELBASE!WaitForMultipleObjectsEx+0xe5 C/C++/ASM
clr!SVR::WaitForFinalizerEvent+0xb7 C/C++/ASM
clr!SVR::GCHeap::FinalizerThreadWorker+0x4a C/C++/ASM
clr!ManagedThreadBase_DispatchInner+0x2d C/C++/ASM
clr!ManagedThreadBase_DispatchMiddle+0x6c C/C++/ASM
clr!ManagedThreadBase_DispatchOuter+0x75 C/C++/ASM
clr!SVR::GCHeap::FinalizerThreadStart+0xd7 C/C++/ASM
clr!Thread::intermediateThreadProc+0x7d C/C++/ASM
kernel32!BaseThreadInitThunk+0x1a C/C++/ASM
ntdll!RtlUserThreadStart+0x1d C/C++/ASM
我在转储analysys中有充分的经验。你能解释一下这是什么意思吗? 看起来线程正在等待一些事件。但是什么事情和为什么这么多线程?