Votre application consomme Ă©normĂ©ment de mĂ©moire Ă cause des fuites de mĂ©moire de Microsoft Edge WebView2 ? đ© Vous n'ĂȘtes pas seul : les dĂ©veloppeurs qui intĂšgrent WebView2 dans des applications Win32, WPF ou WinForms rencontrent souvent ce problĂšme. Mais pas de panique ! Ce guide vous propose des solutions concrĂštes pour identifier, corriger et prĂ©venir les fuites, amĂ©liorer les performances et satisfaire vos utilisateurs. Alors, au travail ! đȘ
â ïž DĂ©tection des fuites de mĂ©moire de WebView2 : principaux symptĂŽmes
Avant toute intervention, vérifiez qu'il s'agit bien d'une fuite de mémoire. Une consommation élevée de mémoire qui ne diminue pas aprÚs la navigation ou l'inactivité de l'application ? C'est un indice. Soyez attentif aux points suivants :
- Augmentation constante de la mĂ©moire utilisĂ©e par les processus dans le Gestionnaire des tĂąches, mĂȘme en cas d'utilisation lĂ©gĂšre.
- L'application ralentit ou plante aprÚs des sessions prolongées.
- Plusieurs instances de WebView2 consomment une quantitĂ© excessive de RAM sans ĂȘtre libĂ©rĂ©es.
Astuce : Utilisez le Gestionnaire des tĂąches Windows (Ctrl+Maj+Ăchap) â Onglet DĂ©tails â Trier par MĂ©moire. Vous pouvez aussi utiliser ProcMon pour une analyse plus approfondie. Une augmentation constante de la consommation de mĂ©moire indique une fuite de mĂ©moire !
đ Causes frĂ©quentes des fuites de mĂ©moire de Microsoft Edge WebView2
Les fuites se cachent dans les piÚges du code et les bizarreries d'exécution. Voici la liste des principales :
| Cause | Pourquoi ça fuit | Vérification rapide |
|---|---|---|
| Ălimination inappropriĂ©e | ContrĂŽleur ou environnement WebView2 non publiĂ© â conserve indĂ©finiment des rĂ©fĂ©rences Chromium. | VĂ©rifier si Dispose()l'appel a Ă©tĂ© effectuĂ© lors de l'arrĂȘt. |
| Durée d'exécution obsolÚte | L'ancienne version d'EverGreen Runtime ne corrige pas les fuites de données. | Vérifier la version via GetAvailableCoreWebView2BrowserVersionString(). |
| Rétention du gestionnaire d'événements | Les événements CoreWebView2 non abonnés permettent de maintenir les objets en vie. | Recherchez NavigationCompleted +=sans -=. |
| Heavy JS/Blazor | Les tas DOM ou WASM non gérés croissent sans contrÎle. | Profil avec Edge DevTools. |
| Prolifération multi-instances | Créer de nouvelles perspectives sans recycler les anciennes. | Compter les handles actifs CoreWebView2. |
Ces causes sont responsables de 90 % des problĂšmes ; corrigez-les en prioritĂ© pour des rĂ©sultats rapides ! đ
1ïžâŁ DĂ©pannage Ă©tape par Ă©tape des fuites de mĂ©moire de Microsoft Edge WebView2
Retroussez vos manches. Suivez ces étapes éprouvées dans l'ordre :
- Mise Ă jour de WebView2 Runtime :
TĂ©lĂ©chargez la derniĂšre version dâEvergreen Bootstrapper . Installez la version corrigĂ©e ou Evergreen (Evergreen se met Ă jour automatiquement pour corriger les fuites de mĂ©moire). RedĂ©marrez lâapplication aprĂšs lâinstallation. â - Mettre en Ćuvre une procĂ©dure d'Ă©limination appropriĂ©e.
Toujours encapsuler dansusingou explicitementDispose():public void FermerWebView() { si (webView != null) { webView.Dispose(); webView = null; } si (environnement != nul) { environnement.Dispose(); environnement = nul ; } }Appeler à la fermeture du formulaire ou à la réinitialisation de la navigation. - Détacher les gestionnaires d'événements
:webView.NavigationCompleted -= OnNavigationCompleted;faites-le avant Dispose pour rompre les cycles. - Surveillance avec les outils
: Gestionnaire des tĂąches + PerfView : capture dâinstantanĂ©s de la mĂ©moire. â Edge DevTools : F12 â onglet MĂ©moire pour les fuites de mĂ©moire JavaScript. â dotMemory : outil JetBrains pour le profilage .NET. - Testez
les fuites mono-thread, elles adorent le chaos asynchrone. Ă utiliserEnsureCoreWebView2Async(null)uniquement sur le thread d'interface utilisateur.
â Correctifs avancĂ©s et meilleures pratiques
Ăa fuit encore ? Passez au niveau supĂ©rieur :
- Recycler les vues : RĂ©utiliser une WebView2 par fenĂȘtre au lieu dâen crĂ©er une nouvelle.
- Limiter les arguments du navigateur : à définir
--disable-background-timer-throttlingavec parcimonie â tester lâimpact. - GC Assist : Appelez
GC.Collect(2, GCCollectionMode.Forced, true);aprĂšs lâĂ©limination, mais avec parcimonie. - SpĂ©cifique Ă Blazor : Utiliser
Virtualizeet supprimer des services dansDisposeAsync. - Exécution du profil : consultez la documentation de Microsoft sur le versionnage pour identifier les versions sujettes aux fuites de mémoire.
đ Tableau des rĂ©sultats : Correctifs concrets issus des forums de dĂ©veloppeurs.
| Correctif appliqué | Perte de mémoire (%) |
|---|---|
| Mise à jour en cours d'exécution | 20-30% |
| Ăliminer correctement | 40-60% |
| Nettoyage aprÚs l'événement | 15-25% |
đ PrĂ©venir les futures fuites de mĂ©moire de WebView2
Prenez ces bonnes habitudes : - Suppression des tests unitaires avec des mocks. - IntĂ©gration et dĂ©ploiement continus (CI/CD) avec profilage mĂ©moire. - Supervision via Application Insights. Votre application sera plus fluide et vos utilisateurs y resteront plus longtemps : que du positif ! Vous rencontrez une fuite de mĂ©moire persistante ? Signalez-la dans les commentaires ci-dessous ; nous la rĂ©soudrons ensemble. đ
Restez à l'écoute pour plus de conseils sur WebView2. Optimisé pour les environnements d'exécution les plus récents.