WPF UserControl Утечка памяти - PullRequest
3 голосов
/ 22 июля 2010

У меня есть UserControl в приложении, в котором я постоянно меняю свойство Content другими UIElements.

Однако я заметил, что в Task Manage через некоторое время память увеличивается после нескольких перестановок ...

Используя AntProfiler, я почему-то заметил там ToolBarAutomationPeer, на который ссылается UserControl ....

Чтобы исправить эту утечку памяти, я сделал свой собственный пользовательский контроль со следующим кодом

public class MyUserControl : UserControl
{
    protected override System.Windows.Automation.Peers.AutomationPeer OnCreateAutomationPeer()
    {

        return null;        
    }

}

Это, кажется, удаляет любые AutomationPeers, на которые может ссылаться пользовательский контроль, которые могут сохранять содержимое, которое я обмениваю, в памяти ...

Но мне все еще интересно знать, как ToolBarAutomationPeer попал в мой UserControl и каковыПоследствия моего возвращения нуля в методе OnCreateAutomationPeer?

Я не очень хорошо разбираюсь в вызовах автоматизации и не уверен, когда они будут полезны

Спасибо

Ответы [ 2 ]

2 голосов
/ 24 июня 2012

Автоматизация запускается, если на вашем компьютере работает клиент автоматизации. Наиболее распространенные из них:

  • Служба ввода планшетного ПК (другими словами, все «планшетоподобные» ПК)
  • Инструменты автоматического тестирования
  • Программы чтения с экрана (и другое программное обеспечение для обеспечения доступности)

Это делает silverlight полным беспорядком и вызывает множество ошибок, и почти всегда делает все утечки как сумасшедшие.

Я отключил автоматизацию, установив этот параметр в моем html:

<param name="windowless" value="true" />

Вы можете прочитать больше здесь: Silverlight + MVVM + Bindings = Утечки памяти?

1 голос
/ 21 июня 2011

Мне было бы любопытно увидеть больше кода, чтобы попытаться выяснить, почему ToolBarAutomationPeer также появляется, но в основном одноранговые узлы автоматизации предназначены для обеспечения доступности.Программы чтения с экрана и другие средства автоматизации могут использовать одноранговые узлы автоматизации для запуска вашего приложения.Обычное использование предназначено для людей, которые так или иначе имеют недостатки, а также для тестирования средств автоматизации.

Возвращая значение NULL, как вы выше, вы делаете свой пользовательский контроль полностью недоступным для автоматизации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...