2012-03-09 7 views
2

Я создаю дополнительные темы для выполнения различных фоновых действий. Если я использую WPF внутри рабочего потока, то мне нужно убедиться, что диспетчер для этого потока отключен изящно, чтобы предотвратить утечку памяти. Существуют ли другие компоненты .NET, которые используют диспетчер? Или WPF - единственный компонент .NET, который его использует?Какие компоненты .NET используют диспетчер?

ответ

1

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

+0

Фоновый поток создает отчет с помощью WPF для настройки визуального дерева, а затем визуализации этого визуального дерева в растровое изображение, которое затем сохраняется на диске. Я обнаружил, что это утечка памяти, и только потом обнаружил, что WPF использует диспетчер для управления памятью. Добавление Dispatcher.CurrentDispatcher.Run() и закрытие его перед выходом из потока устраняет утечку памяти. Чувствовал, есть ли другие области, такие как WCF ?, которые используют диспетчер, и поэтому я должен знать об этом как о потенциальной утечке. –

+0

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

1

Dispatcher внутренне использует SynchronizationContext, который является традиционным классом, который используется в окнах для операций с поперечными потоками. Но «Диспетчер» связан только с WPF.

Смежные вопросы