2010-10-09 1 views
1

Ceci est ma question:Pourquoi les performances de WPF UserControl sont-elles si différentes de l'hôte dans l'application WPF et de l'application de formulaire de gain?

J'ai 200 0000 objet employé (Id, Nom, Job, Adresse) stocké dans une base de données. J'ai lu tous les objets employés à Empolyee [].

créer une application sous forme de fenêtre:

  1. créer un WPF UserControl (à l'intérieur ListBox), le nom est "wpfUserControl1".
  2. Je mets "wpfUserControl1" sous une forme de fenêtre.
  3. J'ai défini wpfUserControl1.listBox.ItemsSource = Employé [].
  4. Les objets employés étaient affichés immédiatement.

    // Les performances sont très bonnes!

Je crée une application WPF

  1. créer un objet MainWindow.
  2. Je mets un ListBox à mainWindow.
  3. J'ai défini listBox.ItemsSource = Employé [].
  4. La vitesse de chargement est très lente et se produit en dehors d'une exception majeure.

    // Si je charge 1000 objets, les performances sont trop lentes!

Mon doute est:

Pourquoi même WPF UserControl a été Hébergé dans WinFormApp et WpfApp, il est différence de performance est si grand?

Répondre

1

Cela pourrait-il avoir quelque chose à voir avec la virtualisation? Par exemple, la grille de données WPF active la virtualisation activée par défaut, mais si vous placez la grille de données dans une pile et que vous n'indiquez aucune restriction de largeur/hauteur, vous annulez la virtualisation puisque la pile permet à la grille de données de croître indéfiniment. créer DataGridRows pour des centaines de milliers d'articles.

Je devine juste que le même effet pourrait se produire avec votre usercontrol. Dans WinForms, le contrôle d'hébergement fournit des restrictions de largeur/hauteur spécifiques et ne permet pas à usercontrol de se développer indéfiniment. En revanche, dans WPF, en fonction de la définition de MainWindow de votre WpfApp, la commande usercontrol peut croître à l'infini. Essayez de définir une largeur/hauteur spécifique pour votre commande usercontrol ou mainwindow et voyez si les performances s'améliorent ...