Утечка памяти привязки команд в WPF

Когда я создаю пользовательский элемент управления, имеющий CommandBinding к RoutedUICommand, я беспокоился, что у меня возникают утечки памяти.

сценарий:

Иметь RoutedUICommand в качестве статического в классе c, где я храню свои команды. Реализация CommandBindings на пользовательском элементе управления. Добавьте пользовательский элемент управления в основную форму. Удалите пользовательский элемент управления из главной формы, установите для него ссылки на нуль.

CanExecute связывания команд продолжает срабатывать. У меня нет ссылки на UserControl, поэтому он просочился. и он продолжает стрелять в течение долгого времени после закрытия формы. (я не видел, чтобы это прекратилось) Если я принудительно собираю мусор, он собирается (хорошо, что canExecute прекращает стрельбу)

У меня есть тестовый проект, который иллюстрирует это. У меня есть Console.WriteLine в canExecute, который печатает хэш-код объекта, запускающего метод. Он имеет кнопку, чтобы добавить новый пользовательский элемент управления и один, чтобы удалить его.

Разве я не должен быть обеспокоен этим? пользовательский элемент управления собирается, если принудительно. Означает ли это, что он будет собран в следующей коллекции? я замечаю снижение производительности в нашем приложении и отслеживаю утечки памяти и т. д. У нас есть сложные формы с большим количеством элементов пользовательского интерфейса, которые тратятся на использование процессора и памяти при удалении из макета. (мы используем много команд) Я думал, что когда что-то было удалено из визуального дерева, оно больше не могло принимать перенаправленные события. что мне не хватает?

1 ответ

Насколько я понимаю, привязки команд используют что-то похожее (но не то же самое), что и шаблон WeakEvent.

В основном, WeakReference проводится. Это позволит ему работать после того, как ваша ссылка исчезнет, ​​но не помешает вашему классу собираться GC, когда ничто другое не ссылается на него.

Короче говоря, не волнуйтесь - это работает так, как должно работать.

Другие вопросы по тегам