2010-07-22 76 views
3

我在一个应用程序中有一个UserControl,我不断地将Content属性与其他UIElements交换。WPF UserControl内存泄漏

但是我注意到任务后管理,而一些互换后的内存上涨...

使用AntProfiler我注意到,由于某些原因ToolBarAutomationPeer的用户控件引用....

要解决此内存泄漏我做我自己的用户控件用下面的代码

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

     return null;   
    } 

} 

这似乎删除该用户控件可以引用可能会保留我记忆中我换了内容的任何AutomationPeers ...

但我仍然有兴趣知道ToolBarAutomationPeer如何进入我的UserControl以及我在OnCreateAutomationPeer方法中返回null的后果是什么?

我不能很好地与自动化腐败现象的成因,并不能肯定熟悉,当他们将

感谢

回答

1

我会很好奇,想看看更多的代码,试图弄清楚为什么ToolBarAutomationPeer也不过基本上显示出合理自动化同行是为了获得可用性。屏幕阅读器和其他自动化工具可以使用自动化同行来运行您的应用程序。常见用途适用于以某种方式残疾人以及测试自动化工具。

通过像上面那样返回空值,使您的用户控件完全无法进入自动化。

2

如果您的计算机上正在运行自动化客户端,则会自动启动。最常见的是:

  • Tablet PC输入服务(换句话说,所有的“像平板电脑的PC)
  • 自动化测试工具
  • 屏幕阅读器(和其他访问性软件)

这使Silverlight变得完全混乱,并导致一些bug,并且几乎总是会让所有的东西都像疯了一样泄漏。

我在我的HTML设置此参数禁用自动化:

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

你可以在这里阅读更多:Silverlight + MVVM + Bindings = Memory leaks?