3.5 で構築されたマルチスレッドの wpf アプリケーションがあります。Process Explorer で実行中のスレッドを見ると、8 つのスレッドがすべて同じ開始アドレス ntdll.dll!RtlUserThreadStart を持ち、8 つすべての CPU 値が 3 ~ 6+ で、Cycles Delta が高いことがわかります。これらのスレッドが何をしているのかわかりません。いつも同じスレッドです。アプリケーションの同じインスタンス内で変化することはありません。アプリケーションを同時にデバッグし、デバッガーを一時停止すると、これらすべてのスレッドが、System.Threading.ConcurrencyScheduler.Scheduler.WaitForWork() または System.Threading.Monitor.Wait() のいずれかのスタックの 1 行を表示しています。
Visual Studio のシンボル ファイルを有効にすると、これらのスレッドに次のスタックが表示されます。
System.Threading.Monitor.Wait() Normal
mscorlib.dll!System.Threading.Monitor.Wait(object obj, int millisecondsTimeout) + 0x19 bytes
System.Threading.dll!System.Threading.ConcurrencyScheduler.Scheduler.WaitForWork() + 0xd0 bytes
System.Threading.dll!System.Threading.ConcurrencyScheduler.InternalContext.Dispatch() + 0x74a bytes
System.Threading.dll!System.Threading.ConcurrencyScheduler.ThreadInternalContext.ThreadStartBridge(System.IntPtr dummy) + 0x9f bytes
プロセス モニター内のスレッドで提供されるスタックを見ると、次のような例が表示されます。
0 ntoskrnl.exe!KeWaitForMultipleObjects+0xc0a
1 ntoskrnl.exe!KeAcquireSpinLockAtDpcLevel+0x732
2 ntoskrnl.exe!KeWaitForSingleObject+0x19f
3 ntoskrnl.exe!_misaligned_access+0xba4
4 ntoskrnl.exe!_misaligned_access+0x1821
5 ntoskrnl.exe!_misaligned_access+0x1a97
6 mscorwks.dll!InitializeFusion+0x990b
7 mscorwks.dll!DeleteShadowCache+0x31ef
また:
0 ntoskrnl.exe!KeWaitForMultipleObjects+0xc0a
1 ntoskrnl.exe!KeAcquireSpinLockAtDpcLevel+0x732
2 ntoskrnl.exe!KeWaitForSingleObject+0x19f
3 ntoskrnl.exe!_misaligned_access+0xba4
4 ntoskrnl.exe!_misaligned_access+0x1821
5 ntoskrnl.exe!KeAcquireSpinLockAtDpcLevel+0x93d
6 ntoskrnl.exe!KeWaitForMultipleObjects+0x26a
7 ntoskrnl.exe!NtWaitForSingleObject+0x41f
8 ntoskrnl.exe!NtWaitForSingleObject+0x78e
9 ntoskrnl.exe!KeSynchronizeExecution+0x3a23
10 ntdll.dll!ZwWaitForMultipleObjects+0xa
11 KERNELBASE.dll!GetCurrentProcess+0x40
12 KERNEL32.dll!WaitForMultipleObjectsEx+0xb3
13 mscorwks.dll!CreateApplicationContext+0x10499
14 mscorwks.dll!CreateApplicationContext+0xbc41
15 mscorwks.dll!StrongNameFreeBuffer+0xc54d
16 mscorwks.dll!StrongNameFreeBuffer+0x2ac48
17 mscorwks.dll!StrongNameTokenFromPublicKey+0x1a5ea
18 mscorwks.dll!CopyPDBs+0x17362
19 mscorwks.dll!CorExitProcess+0x3dc9
20 mscorwks.dll!TranslateSecurityAttributes+0x547f
21 mscorlib.ni.dll+0x8e6bc9
この項目の追加メモとして。私のコンピュータは 4 コアのシングル CPU です。4 コアのデュアル CPU で同じアプリを実行すると、この数のスレッドが 8 から 16 になることがわかります。