Zie je het geheugenverbruik van je app de pan uit rijzen door geheugenlekken in Microsoft Edge WebView2 ? π© Je bent niet de enige β ontwikkelaars die WebView2 in Win32-, WPF- of WinForms-apps integreren, lopen hier vaak tegenaan. Maar geen zorgen! Deze handleiding biedt concrete stappen om lekken op te sporen, te verhelpen en te voorkomen, zodat je de prestaties kunt verbeteren en je gebruikers tevreden kunt houden. Laten we aan de slag gaan en dat RAM-geheugen terugwinnen. πͺ
β οΈ Geheugenlekken in WebView2 opsporen : belangrijkste symptomen
Controleer voordat je het probleem oplost of het daadwerkelijk een geheugenlek is. Een hoog geheugenverbruik dat niet daalt na navigatie of wanneer de app inactief is? Dat is een aanwijzing. Let op de volgende signalen:
- Het procesgeheugen in Taakbeheer neemt gestaag toe, zelfs bij licht gebruik.
- De app wordt trager of crasht na langdurig gebruik.
- Meerdere WebView2-instanties verbruiken onnodig veel RAM-geheugen zonder dat ze worden vrijgegeven.
Pro-tip: Gebruik Taakbeheer van Windows (Ctrl+Shift+Esc) β tabblad Details β Sorteren op Geheugen. Of gebruik ProcMon voor meer gedetailleerde informatie. Constante stijgingen duiden op een geheugenlek !
π Veelvoorkomende oorzaken van geheugenlekken in Microsoft Edge WebView2
Lekken zitten verborgen in codefouten en runtime-eigenaardigheden. Hier is een lijst met veelvoorkomende fouten:
| Oorzaak | Waarom het uitlekt | Snelcontrole |
|---|---|---|
| Onjuiste afvalverwerking | De WebView2-controller of -omgeving is niet vrijgegeven en houdt Chromium-referenties voor altijd vast. | Controleer of Dispose()deze functie is aangeroepen bij het afsluiten. |
| Verouderde runtime | De oude EverGreen Runtime-versie mist beveiligingslekken. | Controleer de versie via GetAvailableCoreWebView2BrowserVersionString(). |
| Behoud van gebeurtenisafhandelaars | Niet-geabonneerde CoreWebView2-gebeurtenissen houden objecten in leven. | Zoeken NavigationCompleted +=zonder -=. |
| Zware JS/Blazor | Niet-beheerde DOM- of WASM-heaps groeien ongecontroleerd. | Profiel aanmaken met Edge DevTools. |
| Spreiding van meerdere instanties | Nieuwe perspectieven creΓ«ren zonder oude te herhalen. | Tel het aantal actieve CoreWebView2handles. |
Deze oorzaken zijn verantwoordelijk voor 90% van de problemen β pak ze als eerste aan voor snelle resultaten! π
1οΈβ£ Stapsgewijze probleemoplossing voor geheugenlekken in Microsoft Edge WebView2
Stroop je mouwen op. Volg deze beproefde stappen in de juiste volgorde:
- Update de WebView2 Runtime.
Download de nieuwste Evergreen Bootstrapper . Installeer de Fixed Version of Evergreen (Evergreen wordt automatisch bijgewerkt om lekken te dichten). Start de app opnieuw na de installatie. β - Implementeer de juiste afvalverwerking.
Wikkel het altijd inusingof gebruik explicietDispose():public void CloseWebView() { als (webView != null) { webView.Dispose(); webView = null; } als (omgeving != null) { environment.Dispose(); omgeving = null; } }Roep de functie aan bij het sluiten van het formulier of het resetten van de navigatie. - Ontkoppel gebeurtenissen
en handlers:webView.NavigationCompleted -= OnNavigationCompleted;doe dit vΓ³Γ³r Dispose om cycli te doorbreken. - Monitoren met tools
- Taakbeheer + PerfView: maak momentopnamen van de geheugenopslag. - Edge DevTools: F12 β tabblad Geheugen voor JavaScript-lekken. - dotMemory: JetBrains-tool voor .NET-profilering. - Test Single-Threaded
Leaks gedijt goed bij asynchrone chaos.EnsureCoreWebView2Async(null)Alleen gebruiken op de UI-thread.
β Geavanceerde oplossingen en beste werkwijzen
Lekt het nog steeds? Ga een stapje verder:
- Hergebruik weergaven: Hergebruik één WebView2 per venster in plaats van een nieuwe te creëren.
- Beperk browserargumenten: stel ze
--disable-background-timer-throttlingspaarzaam in en test het effect. - GC Assist: Bel
GC.Collect(2, GCCollectionMode.Forced, true);na de afhandeling, maar spaarzaam. - Blazor-specifiek: Gebruik
Virtualizeen verwijder services inDisposeAsync. - Profielruntime: Raadpleeg de versiebeheerdocumentatie van Microsoft voor builds die gevoelig zijn voor geheugenlekken.
π Resultatentabel: Praktische oplossingen van ontwikkelaarsforums.
| Oplossing toegepast | Geheugenverlies (%) |
|---|---|
| Runtime-update | 20-30% |
| Correcte verwijdering | 40-60% |
| Opruimen na evenement | 15-25% |
π Voorkom toekomstige geheugenlekken in WebView2
Maak er een gewoonte van: - Unit tests afhandelen met mocks. - CI/CD met geheugenprofilering. - Monitoren via Application Insights. Je app zal soepeler draaien, gebruikers blijven langer β een win-winsituatie! Heb je een hardnekkig geheugenlek? Laat het weten in de reacties hieronder β we lossen het samen op. π
Blijf op de hoogte voor meer tips over WebView2. Geoptimaliseerd voor de nieuwste runtime-omgevingen.