2010-07-22 5 views
3

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

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

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

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

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

     return null;   
    } 

} 

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

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

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

Благодаря

ответ

1

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

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

2

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

  • Tablet PC Input Service (другими словами, все 'таблетки как' ПК) инструменты
  • Automated Testing
  • для чтения с экрана (и другое программное обеспечение Как добираться)

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

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

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

Вы можете прочитать здесь: Silverlight + MVVM + Bindings = Memory leaks?

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