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

- [SharePoint] Les sessions TechDays 2012… par Le blog de Patrick [MVP SharePoint] le il y a 5 heures et 56 minutes

- TechDays Paris 2012 : Session pleinière jour 3 par Blog Technique de Romelard Fabrice le 02-09-2012, 11:01

- Mishra Reader : un lecteur RSS très Zune Style en Open Source ! par Cyril Sansus le 02-09-2012, 08:28

- [framework 4] Les Tasks et le Thread UI par Fathi Bellahcene le 02-09-2012, 00:33

- Workflow Foundation 3 a un pied dans la tombe par Blog de Jérémy Jeanson le 02-08-2012, 22:15

- TechDays Paris 2012 : Nouvelles tendances du poste de travail - Bring Your own PC par Blog Technique de Romelard Fabrice le 02-08-2012, 19:42

- TechDays Paris 2012 : System Center Service Manager 2012 Vue d’ensemble par Blog Technique de Romelard Fabrice le 02-08-2012, 17:32

- TechDays Paris 2012 : Pleinière second jour par Blog Technique de Romelard Fabrice le 02-08-2012, 16:23

- TechDays Paris 2012 : Retour d'expérience sur la mise en place d'un Cloud Privé par Blog Technique de Romelard Fabrice le 02-08-2012, 16:04

- TechDays Paris 2012 : Comment SharePoint a sauvé mes TechDays par Blog Technique de Romelard Fabrice le 02-07-2012, 23:59