簡體   English   中英

VS2010性能分析:如何識別工作線程? (CurrentThread.Name生成異常)

[英]VS2010 Performance Analysis: How can I identify Worker Threads? (CurrentThread.Name generates an exception)

如何識別負責跨核心上下文切換的線程以及同步保持的線程?

(PS:我是Visual Studio的這一部分的新手,我正在學習中,對技巧表示贊賞!)

在此處輸入圖片說明

花費大量時間進行同步的各種線程的堆棧跟蹤信息,我不知道為什么:

螺紋12384

 Category = Synchronization Delay = 650947.5375 ms
 ntoskrnl.exe!SwapContext_PatchXRstor ntoskrnl.exe!KiSwapContext
 ntoskrnl.exe!KiCommitThreadWait ntoskrnl.exe!KeWaitForSingleObject
 ntoskrnl.exe!NtWaitForSingleObject ntoskrnl.exe!KiSystemServiceCopyEnd

螺紋8792

 Category = Synchronization API = WaitForMultipleObjects
 Delay = 8993.9801 ms Unblocked by thread 3052; click 'Unblocking
 Stack' for details. kernel32.dll!_WaitForMultipleObjects@16
 clr.dll!WKS::WaitForFinalizerEvent
 clr.dll!WKS::GCHeap::FinalizerThreadWorker
 clr.dll!Thread::DoExtraWorkForFinalizer
 clr.dll!Thread::ShouldChangeAbortToUnload
 clr.dll!Thread::ShouldChangeAbortToUnload
 clr.dll!ManagedThreadBase_NoADTransition
 clr.dll!ManagedThreadBase::FinalizerBase
 clr.dll!WKS::GCHeap::FinalizerThreadStart
 clr.dll!Thread::intermediateThreadProc
 kernel32.dll!@BaseThreadInitThunk@12 ntdll.dll!___RtlUserThreadStart@8
 ntdll.dll!__RtlUserThreadStart@8


 The Unblocking stack for the above is

 Thread 8792 was unblocked by thread 3052 The unblocking call stack
 follows: ntoskrnl.exe! ?? ?? ::FNODOBFM::`string'
 ntoskrnl.exe!NtSetEvent ntoskrnl.exe!KiSystemServiceCopyEnd
 wow64cpu.dll!CpupSyscallStub wow64cpu.dll!Thunk0Arg
 wow64.dll!RunCpuSimulation wow64.dll!Wow64LdrpInitialize ntdll.dll! ??
 ?? ::FNODOBFM::`string' ntdll.dll!LdrInitializeThunk
 ntdll.dll!_ZwSetEvent@8 kernelbase.dll!_SetEvent@4
 clr.dll!CLREvent::Set clr.dll!WKS::gc_heap::try_allocate_more_space
 clr.dll!WKS::gc_heap::allocate_more_space clr.dll!WKS::GCHeap::Alloc
 clr.dll!Alloc clr.dll!FastAllocatePrimitiveArray clr.dll!JIT_NewArr1
 mscorlib.ni.dll![mscorlib.dll] mscorlib.ni.dll![mscorlib.dll]
 mscorlib.ni.dll![mscorlib.dll] mscorlib.ni.dll![mscorlib.dll]
 !0x206b89 system.core.ni.dll![<Unknown>]
 system.core.ni.dll![<Unknown>] system.core.ni.dll![<Unknown>]

在此處輸入圖片說明

不能完全回答您的確切問題,但是我在解決這些問題時發現的最快方法是獲取進程轉儲然后打開windbg。

確定哪個線程正在阻塞的快速命令是!syncblk,因此類似以下內容應有助於識別哪些線程正在阻塞

.load C:\\ Windows \\ Microsoft.NET \\ Framework64 \\ v2.0.50727 \\ sos

。鏈

!syncblk

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM