19 тем для приложения WPF

Я только что создал новое приложение WPF, которое имеет около 5 окон и использует сетку данных Xceed. После просмотра в диспетчере задач я увидел, что это небольшое приложение имеет 19 потоков.

Это может быть правильно? Я ожидал, что среда WPF будет использовать 2-3 потока, но не 19. Или я делаю что-то неправильно?

Ответ 1

Во-первых, это не 19.

При запуске "Hello, World!" WPF, я вижу 10 потоков в диспетчере задач. При запуске одного и того же приложения с помощью отладчика Visual Studio он использует 19. Итак, во-первых, из 9 из них добавлены как служебные данные из отладчика.

Теперь для 10.

Согласно статье MSDN Magazine, названной "Создайте более отзывчивые приложения с Диспетчером" , WPF запускается с двумя потоками:

Все приложения WPF начинаются с два важных потока, один для рендеринга и один для управления пользовательским интерфейсом. Поток рендеринга это скрытый поток, который выполняется в фон, поэтому единственная нить, которая вы обычно имеете дело с пользовательским интерфейсом нить.

Но согласно этой статье, во всех управляемых приложениях WPF есть много основных потоков:

Существуют различные типы .NET. потоки: финализатор, GC, отладчик, таймер, поток, первичный и фоновые потоки. Но не все связаны потоки, связанные с .NET.

Начиная с два из WPF, добавьте GC и финализатор, чтобы получить четыре. Добавьте в поток отладчика (все управляемые приложения имеют один, даже если не отладки), чтобы добраться до пять. Добавьте таймер в шесть.

И, присоединяя отладчик к моему приложению WPF после запуска его вне VS, я вижу, что в пуле потоков есть два рабочих потока. Это, вероятно, минимум. Это получает мое приложение до восемь.

Есть два, которые я точно не могу объяснить, но они скорее COM-потоки для interop (они определенно не управляются потоками). вторая статья, на которую я ссылался, обсуждает их больше.

Но настоящая мораль истории здесь, не беспокойтесь о них. Если ваниль "Привет, мир!" Приложение использует 10, то есть ваш базовый уровень. Остерегайтесь только тех потоков, которые вы создаете за пределами этого минимума.