Microsoft Edge WebView2'yi entegre ettikten sonra uygulamanızın bellek kullanımının hızla arttığını mı görüyorsunuz ? Yalnız değilsiniz. WebView2 bellek sızıntıları uygulamaların çökmesine, performansın yavaşlamasına ve geliştiricilerin hayal kırıklığına uğramasına neden olabilir. Ama endişelenmeyin; bu kılavuz, Microsoft Edge WebView2 bellek sızıntılarını tespit etmek, düzeltmek ve önlemek için uygulanabilir adımlarla sorun gidermeyi sunuyor . Hadi başlayalım ve uygulamanızın sorunsuz çalışmasını sağlayalım! ✅
WebView2 Bellek Sızıntılarını Anlamak : Neden Oluşurlar?
Microsoft Edge WebView2, WinForms, WPF veya WinUI uygulamalarına web içeriği yerleştirmek için güçlü bir araçtır. Ancak, çalışma zamanı kaynakları serbest bırakmadığında, genellikle JavaScript, olay işleyicileri veya uygunsuz kaynak kullanımı nedeniyle bellek sızıntıları meydana gelir. Belirtiler şunlardır:
- RAM'in zaman içinde kademeli olarak artması
- Uygulama uzun süreli kullanımdan sonra donuyor veya çöküyor.
- Yüksek CPU ve bellek artışları
- Görev Yöneticisinde birden fazla WebView2 örneği çalışmaya devam ediyor.
Bu belirtileri erken mi fark ettiniz? Aşağıdaki çözümlere geçin. Teşhise hazır mısınız? Profesyonel ipuçları için okumaya devam edin. 👇
Microsoft Edge WebView2 Bellek Sızıntıları İçin Adım Adım Sorun Giderme Kılavuzu
Sızıntıları tespit etmek ve gidermek için bu yapılandırılmış yaklaşımı izleyin. Dahili araçları kullanacağız; ek indirme yapmanıza gerek yok.
1️⃣ Görev Yöneticisi ve Performans Profilleyicisi ile İzleme
Görev Yöneticisi'ni açın (Ctrl+Shift+Esc) ve "Ayrıntılar" altında WebView2 işlemlerini izleyin. "WebViewHost.exe" veya uygulamanızın PID'sini filtreleyin. Bellek kullanımı sürekli artıyorsa devam edin.
Visual Studio'nun Tanılama Araçlarını kullanın (Hata Ayıklama > Performans Profilleyici > Bellek Kullanımı). WebView2 işlemlerinden önce/sonra anlık görüntü alın:
| Belirti |
Beklenen Davranış |
Sızıntı Göstergesi |
| Sayfaya git |
Bellek <100MB'de sabitleniyor |
+200MB yayınlanmamış |
| JavaScript'i çalıştır |
GC sonrası hızlı paylaşım |
Sürekli büyüme |
| WebView'i kapat |
Tam sürüm |
%50 hafıza korundu |
2️⃣ Çalışma Ortamını Kontrol Edin
En güncel WebView2 Runtime (Evergreen) sürümünde olduğunuzdan emin olun . Microsoft'un resmi sitesinden indirin . Uyumsuzluklar sızıntılara neden olur; Bootstrapper veya düzeltilmiş sürüm aracılığıyla güncelleyin.
Kodda doğrulayın:
var env = CoreWebView2Environment.CreateAsync(null, userDataFolder).Result;
Console.WriteLine(env.BrowserVersionString);
3️⃣ JavaScript ve DOM Sorunlarını İnceleyin
JS zamanlayıcıları, olay dinleyicileri ve sonsuz döngüler suçludur. WebView2'nin Geliştirici Araçlarını kullanın:
- Arama
ExecuteScriptAsync("window.openDevTools()")
- Bellek sekmesine gidin > Yığın Anlık Görüntüsü Alın
- Ayrılmış DOM düğümlerini veya büyüyen dizileri arayın.
İpucu: CoreWebView2.Settings.AreDefaultContextMenusEnabled = false;Özel JavaScript temizliği ile çöp toplama işlemini zorlayın. 🚀
WebView2 Bellek Sızıntıları İçin En İyi Çözümler
İşte denenmiş ve test edilmiş çözümler. Bunları tek tek uygulayın ve test edin.
✅ Uygun İmha ve Navigasyon İşlemleri
WebView2'yi her zaman doğru şekilde serbest bırakın:
public void DisposeWebView()
{
if (webView != null)
{
webView.NavigationStarting -= OnNavigationStarting;
webView.CoreWebView2?.Dispose();
webView.Dispose();
webView = null;
}
}
Gezinti sırasında bellek sızıntılarını önleyin: new Navigate() öncesinde Stop() kullanın.
❌ Sık Karşılaşılan Hatalar ve Hızlı Çözümler
| Tuzak |
Düzeltmek |
Bellek Kaydedildi |
| Kullanılmamış Olay İşleyicileri |
Tüm abonelikleri iptal et (örneğin, NavigationCompleted -=) |
~150MB |
| Yoğun Medya/Bloblar |
JS'de revokeObjectURL() işlevini çağırın. |
~300MB |
| Çoklu Ortamlar |
Tek bir CoreWebView2Environment'ı yeniden kullanın. |
~500MB |
| GC Baskılanması |
GC.Collect() (nadiren) dispose işleminden sonra kullanılır. |
Değişkenlik gösterir |
Gelişmiş: Özel Mesaj Döngüsü ve Barındırma
Yüksek yük altındaki uygulamalar için WebView2'yi ayrı bir HWND'de barındırın. İş parçacığı ayarları için Microsoft'un Bellek Yönetimi belgelerine bakın.
Gelecekteki WebView2 Bellek Sızıntılarını Önlemek İçin En İyi Uygulamalar
- WebView2 örneklerini yeniden kullanın, her sayfa için yeniden oluşturmayın. ⭐
- iframe ve WebSocket kullanımını sınırlandırın.
- İçerik için tembel yükleme (lazy loading) özelliğini uygulayın.
- ETW izleme dosyalarıyla test edin:
xperf -on Microsoft-EdgeWebView+Base
- Uygulama Analizleri ile üretim ortamında düzenli olarak profil oluşturun.
Bu alışkanlıklar hafızayı uzun vadede kontrol altında tutar. Kendinizi daha güçlü hissediyor musunuz? Sıradaki uygulama sizin için!
Sonuç: Bugün Kontrolü Geri Alın
Microsoft Edge WebView2 bellek sızıntılarını gidermek bir kabus olmak zorunda değil. İzlemeden gidermeye kadar bu adımlarla bellek kullanımını %70'ten fazla azaltacak ve son derece sağlam uygulamalar sunacaksınız. Zor bir durumla mı karşılaştınız? Yorumlara yazın, yardımcı olmak için buradayız! 👏
Şimdi bir düzeltme uygulayın ve mucizeyi izleyin. Kazanımlarınızı aşağıda paylaşın! 🚀