2009-09-27 11 views
11

Acabo de crear una nueva aplicación WPF que tiene aproximadamente 5 ventanas y hace uso de la cuadrícula de datos Xceed. Después de mirar en el administrador de tareas, vi que esta pequeña aplicación tenía 19 subprocesos en ejecución.19 Hilos para la aplicación WPF

¿Esto puede ser correcto? Esperaba que el marco WPF utilizara 2-3 hilos, pero no 19. ¿O estoy haciendo algo mal?

+0

Así es exactamente como funciona con cualquier aplicación de Windows. 10 es casi el mínimo indispensable si muestra un formulario. –

+0

¿Qué necesita un formulario con 10 hilos?Necesita uno para la bomba de mensajes. ¿Para qué son los otros 9? –

+0

Eso suena muy extraño. Esperaría dos hilos para una aplicación regular con hilos adicionales para trabajadores de fondo, etc., pero no 19. –

Respuesta

17

En primer lugar, no es 19.

Cuando se ejecuta un "Hola, mundo!" La aplicación WPF, veo 10 hilos en el Administrador de tareas. Cuando ejecuta la misma aplicación con el depurador de Visual Studio, usa 19. Por lo tanto, primero, factorice 9 de estos agregados como sobrecarga del depurador.

Ahora para el 10.

Según un artículo de MSDN Magazine llamada "Build More Responsive Apps With The Dispatcher", WPF comienza con dos hilos:

aplicaciones

Todo WPF comienzan con dos hilos importantes, uno para la prestación de y uno para la gestión de la interfaz de usuario. El subproceso de representación es un subproceso oculto que se ejecuta en el fondo , por lo que el único subproceso que normalmente trata es el subproceso UI .

Pero de acuerdo con this article, hay un montón de temas básicos en todas las aplicaciones gestionadas, WPF o no:

Hay diferentes tipos de .NET hilos: finalizador, GC, depurador, temporizador , threadpool, primario y hilos de fondo. Pero no todos los hilos relacionados con .NET son gestionados.

A partir de la dos de WPF, agregue en el GC y el finalizador de levantarse a las cuatro . Agregue el subproceso de depurador (todas las aplicaciones administradas tienen una, incluso cuando no esté depurando) para obtener five. Agregue el temporizador para obtener six.

Y, al conectar un depurador a mi aplicación WPF después de iniciarlo fuera de VS, puedo ver que hay dos subprocesos de trabajo en el grupo de subprocesos. Esto es probablemente un mínimo. Esto hace que mi aplicación llegue a ocho.

Hay dos que no puedo explicar exactamente, pero es probable que sean hilos COM para la interoperabilidad (definitivamente no son hilos gestionados). El second article al que me refiero analiza más de estos.

Pero la verdadera moraleja de la historia aquí es que no te preocupes por ellos. Si un vainilla "¡Hola, mundo!" la aplicación usa 10, esa es tu línea de base. Solo preocúpate de los hilos que crees más allá de este mínimo.

Cuestiones relacionadas