Утечка памяти в WPF в XP (CMilChannel, HWND)
Мое приложение WPF теряет память со скоростью около 4 Кбит / с. Использование памяти в диспетчере задач постоянно увеличивается, пока приложение не завершится сНедостаточно памяти" исключение.
Проведя собственное исследование, я обнаружил, что проблема обсуждается здесь:Отследить утечку памяти в WPF и № 8 здесь:http://blogs.msdn.com/jgoldb/archive/2008/02/04/finding-memory-leaks-in-wpf-based-applications.aspx
Описанная проблема: Это утечка в WPF, присутствующая в версиях платформы вплоть до .NET 3.5 SP1. Это происходит из-за способа, которым WPF выбирает, какой HWND использовать для отправки сообщений из потока рендеринга в поток пользовательского интерфейса. Этот образец уничтожает первый созданный HWND и запускает анимацию в новом окне. Это приводит к тому, что сообщения, отправляемые из потока рендеринга, накапливаются без обработки, что приводит к утечке памяти.
Предлагаемое решение: Обходной путь - сначала создать новый HwndSource в своем конструкторе класса App. Это ДОЛЖНО быть создано до того, как WPF создаст любой другой HWND. Просто создав этот HwndSource, WPF будет использовать его для отправки сообщений из потока рендеринга в поток пользовательского интерфейса. Это гарантирует, что все сообщения будут обработаны, и что ни одно из них не будет пропущено.
Но я нене понимаю решение! У меня есть подкласс Application, который я использую, и я попытался создать окно в этом конструкторе, но это не решило проблему.
Следуя буквальным инструкциям, похоже, мне просто нужно добавить это в конструктор приложения:
new HwndSource(new HwndSourceParameters("MyApplication"));