El administrador de grupo de subprocesos se asegura de que solo se permite la ejecución de tantos subprocesos, ya que tiene núcleos de CPU. Tan pronto como se completa, se permite ejecutar otra que está esperando en la cola.
Dos veces por segundo, reevalúa lo que está sucediendo con los hilos en ejecución. Si no completan, se supone que están bloqueados y permite que se ejecute otro hilo en espera. En la típica CPU de dos núcleos, obtendrá dos subprocesos ejecutándose de inmediato, el tercer subproceso comenzará después de un segundo, el cuarto subproceso después de 1.5 segundos, etcétera.
Bueno, ahí está tu segundo. La corrección Q & D es usar ThreadPool.SetMinThreads(), pero esa es la solución mazo. El problema real es que su programa utiliza subprocesos de grupo de subprocesos para tareas de larga ejecución. Ya sea porque ejecutan una gran cantidad de código o porque bloquean algún tipo de solicitud de E/S. Este último es el caso más común.
La manera de resolverlo es no utilice un hilo de grupo de subprocesos para tal subproceso de bloqueo, pero utilice la clase Thread en su lugar. No haga esto si los hilos realmente están quemando ciclos de CPU, reducirá la velocidad de todo. Fácil de decir, verás 100% de carga de CPU en Taskmgr.exe
¿Esto es 'Control.BeginInvoke' o' Delegate.BeginInvoke'? –
Está haciendo un nuevo hilo, pero no sé cuánto tiempo debería durar. Probablemente muy rápido. –
Crear un nuevo hilo es relativamente caro. –