2010-07-22 5 views
3

J'ai un UserControl dans une application où je permute constamment la propriété Content avec d'autres UIElements.WPF UserControl Fuite de mémoire

Cependant, je remarqué dans la tâche Gérer après un certain temps la mémoire monte après un certain nombre de swaps ...

En utilisant AntProfiler j'ai remarqué pour une raison quelconque, il ToolBarAutomationPeer que les références UserControl ....

pour corriger cette fuite de mémoire, je fait mon propre usercontrol avec le code suivant

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

     return null;   
    } 

} 

cela semble enlever tout AutomationPeers que le usercontrol peut faire référence qui peut garder le contenu que je suis en mémoire ... swapping

Mais je suis toujours intéressé de savoir comment un ToolBarAutomationPeer est entré dans mon UserControl et quelles sont les ramifications de moi retournant null dans la méthode OnCreateAutomationPeer?

Je ne suis pas bien familiarisés avec automatisation callses et ne sais pas quand ils seraient utiles

Merci

Répondre

1

Je serais curieux de voir plus de code pour essayer de comprendre pourquoi la ToolBarAutomationPeer apparaît aussi, mais essentiellement les pairs d'automatisation sont pour l'accessibilité. Les lecteurs d'écran et autres outils d'automatisation peuvent utiliser les homologues d'automatisation pour exécuter votre application. Les utilisations courantes sont pour les personnes qui sont handicapées d'une manière ou d'une autre et aussi tester des outils d'automatisation. En retournant null comme vous êtes ci-dessus, vous rendez votre contrôle utilisateur complètement inaccessible à l'automatisation.

2

L'automatisation est activée si un client Automation est exécuté sur votre ordinateur. L'être le plus commun:

  • Tablet service d'entrée PC (en d'autres termes, tous les 'tablettes comme' PC)
  • Outils de tests automatisés
  • Les lecteurs d'écran (et d'autres logiciels de accessability)

Cela rend Silverlight un désordre complet et provoque un certain nombre de bugs, et presque toujours fait tout fuir comme un fou.

I automatisation désactivé en réglant ce paramètre dans mon html: Vous pouvez en lire plus ici

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

: Silverlight + MVVM + Bindings = Memory leaks?