Supervisando mi aplicación .NET en el Monitor de rendimiento Puedo ver .NET CLR LocksAndThreads/# de subprocesos lógicos actuales está aumentando constantemente (actualmente 293) en el tiempo que indica la pila de subprocesos esta goteando.subprocesos lógicos actuales aumentando/la pila de subprocesos se está filtrando
puedo encontrar muchos artículos que me digas que esto es el problema, pero nada de lo que me dice cómo encontrar la causa - por lo que ¿Por dónde comienzo? ¿Puede Windbg decirme dónde está el problema?
Ésta es mi monitor de rendimiento a lo largo de 3 horas contando mis hilos lógicos actuales es de 150:
Y esta es la salida de la ventana de hilos, que no me dice mucho porque no puede acceder a sus llamadas: en su mayoría están marcados como [no disponible] o [En espera, espere o únase] | [Código externo]:
Unflagged 141024 124 Worker Thread <No Name> Normal
Unflagged > 0 0 Unknown Thread [Thread Destroyed]
Unflagged 136272 2 Worker Thread <No Name> Highest
Unflagged 133060 7 Worker Thread vshost.RunParkingWindow [Managed to Native Transition] Normal
Unflagged 136952 10 Main Thread Main Thread [edited].Program.Main Normal
Unflagged 134544 9 Worker Thread .NET SystemEvents [Managed to Native Transition] Normal
Unflagged 136556 11 Worker Thread Worker Thread [edited].MessageService.ProcessJobs.AnonymousMethod__0 Normal
Unflagged 141364 113 Worker Thread <No Name> [In a sleep, wait, or join] Normal
Unflagged 140896 0 Worker Thread [Thread Destroyed] Normal
Unflagged 136776 19 Worker Thread <No Name> [In a sleep, wait, or join] Normal
Unflagged 135704 20 Worker Thread <No Name> [In a sleep, wait, or join] Normal
Unflagged 136712 21 Worker Thread <No Name> [In a sleep, wait, or join] Normal
Unflagged 134984 22 Worker Thread <No Name> [In a sleep, wait, or join] Normal
Unflagged 134660 23 Worker Thread Worker Thread [edited].BroadcastService.ProcessJobs.AnonymousMethod__1d Normal
Unflagged 140224 152 Worker Thread <No Name> Normal
Unflagged 140792 157 Worker Thread <No Name> Normal
Unflagged 137116 0 Worker Thread <No Name> Normal
Unflagged 140776 111 Worker Thread <No Name> Normal
Unflagged 140784 0 Worker Thread [Thread Destroyed] Normal
Unflagged 140068 145 Worker Thread <No Name> Normal
Unflagged 139000 150 Worker Thread <No Name> Normal
Unflagged 140828 52 Worker Thread <No Name> Normal
Unflagged 137752 146 Worker Thread <No Name> Normal
Unflagged 140868 151 Worker Thread <No Name> Normal
Unflagged 141324 139 Worker Thread <No Name> Normal
Unflagged 140168 154 Worker Thread <No Name> Normal
Unflagged 141848 0 Worker Thread [Thread Destroyed] Normal
Unflagged 135544 153 Worker Thread <No Name> Normal
Unflagged 142260 140 Worker Thread <No Name> Normal
Unflagged 141528 142 Worker Thread <No Name> [In a sleep, wait, or join] Normal
Unflagged 141344 0 Worker Thread [Thread Destroyed] Normal
Unflagged 140096 136 Worker Thread <No Name> Normal
Unflagged 141712 134 Worker Thread <No Name> Normal
Unflagged 141688 147 Worker Thread <No Name> Normal
Actualización: Desde entonces, he seguido el culpable a una System.Timers.Timer. Incluso cuando este temporizador llamó a un método vacío en cada evento transcurrido, aún aumentó el recuento de hilos lógicos indefinidamente. El simple hecho de cambiar el temporizador a un DispatcherTimer ha solucionado el problema.
Comencé a buscar en todos los temporizadores de mi aplicación después de ver un número grande al ejecutar !dumpheap -type TimerCallback
en Windbg como se menciona en this question.
todavía me gustaría saber cómo me podría haber detectado esto a través de WinDbg depuración en lugar del método desactivar los temporizadores/rendimiento/comprobación de repetición que me llevan a la corrección. Es decir. cualquier cosa que podría haberme dicho qué temporizador estaba creando el problema.
¿Sabes qué los está creando y por qué? –
Mi aplicación tiene muchas partes móviles, por lo que el "por qué" sería una cantidad de tareas de fondo distintas. Estoy tratando de encontrar la fuente del aumento para descubrir "qué". – DaveO