Performance de démarrage d'un ElementHost WPF dans une WinForm

Immaginez avoir une application WinForms relativement complexe, et que les sirènes de WPF sont tellement attirantes, que vous voulez intégrer un contrôle WPF dans un formulaire quelque part perdu dans l'application. Le formulaire question est ouvert et fermé souvent.

La solution est de coder son contrôle WPF, puis de l'intégrer dans une application WinForms en utilisant ElementHost, ce petit bout de "magie" qui fait gagner bien du temps.

Rapidement, on constate que le chargement du contrôle WPF prend énormément de temps... Sur ma machine, un Core2 Duo 3Ghz, cela prend à chaque ouverture du formulaire quelque chose comme 3 à 4 secondes avant d'afficher proprement le formulaire qui contient le ElementHost. Et non content de ralentir le chargement du formulaire, l'affichage se faire par morceaux... Pas très fancy... Simple intuition, mais cela ressemble au chargement du runtime de WPF qui prend du temps...

La solution pour améliorer tout ca est relativement simple : Il suffit de garder un contrôle ElementHost "vide" visible en tout temps. Placer un contrôle de type ElementHost de taille 1x1 quelque part dans une fenêtre qui reste visible tout au long de l'exécution de l'application.

Le résultat, le formulaire s'affiche sans aucun délai ni problème visuel. Bien entendu, le chargement du formulaire "initial" qui contient le ElementHost vide prend du temps à charger au départ, mais cette fois ci le formulaire qui contient vraiment un contrôle WPF s'affiche instantanément, et sans bizarreries visuelles.

D'un point de vue plus technique, il semblerait que l'initialisation de WPF se fait lors de la création du premier ElementHost de l'application, puis se désinitialise lors de la fermeture du dernier ElementHost de l'application. Une petite analyse par réflector ne m'a pas montré l'existence d'une méthode "InitializeAndKeepWPFInitialized()", et il s'agit très probablement d'instancier un type de WPF pour initialiser proprement le tout... Mais créer une instance d'un ElementHost est amplement suffisant !

Publié dimanche 9 août 2009 08:47 par jay
Classé sous ,
Ce post vous a plu ? Ajoutez le dans vos favoris pour ne pas perdre de temps à le retrouver le jour où vous en aurez besoin :

Commentaires

# re: Performance de démarrage d'un ElementHost WPF dans une WinForm @ dimanche 9 août 2009 16:22

Excellent. Pour tout un tas de raisons, la maintenance des winforms est encore bien réelle, et ce tips est l'essence même du bloggage utile.

Merci Jérôme.

Graveen


Les 10 derniers blogs postés

- Les actualités de la semaine sur c2i.fr (14 mai - 20 mai) par Richard Clark le il y a 4 heures et 19 minutes

- Reactive Extensions : Consommer des services avec Rx Partie 3, les pièges à éviter par Léonard Labat le il y a 13 heures et 24 minutes

- SharePoint Blog Site, problème d’archives par Le Blog (Vert) d'Arnaud JUND le 05-20-2012, 13:09

- Soirée ALT.NET Mai - 3 présentations par #Rui le 05-18-2012, 11:59

- [ #SharePoint 2010][ #SQLServer 2012] AlwaysOn pour SharePoint (2/4) : Configuration (2e partie)… par Le blog de Patrick [MVP SharePoint] le 05-18-2012, 11:31

- Team Foundation Server 11: tous les trésors cachés du site d’équipe par Philess le 05-16-2012, 19:01

- [PowerShell 3] Télécharger et installer la documentation en ligne par Blog de SPBrouillet (Pierrick BROUILLET) le 05-16-2012, 17:36

- [#SharePoint 2010][#SQLServer 2012] AlwaysOn pour SharePoint (1/4) : Configuration (1ère partie)… par Le blog de Patrick [MVP SharePoint] le 05-16-2012, 12:10

- Job Day @MIC Brussels - .Net Developers on Mobile applications par Le Blog (Vert) d'Arnaud JUND le 05-15-2012, 20:26

- [SharePoint 2010] – SharePoint 2010, Windows (Server) 8 et des erreurs IIS sont dans une VM… par Blog de SPBrouillet (Pierrick BROUILLET) le 05-14-2012, 12:10