UWP应用程序WebView内存泄漏,无法清除图像

UWP应用程序WebView内存泄漏,无法清除图像,webview,uwp,uwp-xaml,Webview,Uwp,Uwp Xaml,问题: WebView在加载图像后未释放内存 如果所有WebView实例都被销毁几秒钟,内存似乎就会释放。我们从XAML树中删除了代码中的所有引用。我们在调试器中签入所有实例都已在该点释放 这个解决方案是有问题的,因为web视图必须死一段时间才能启动内存清理,对于我们的用例来说是不可接受的 如何复制: 使UWP C app或C++ UWP APP >添加WebVIEW->加载大随机图像的图像->内存不断增长。< /P> 我们只有一个活动的WebView,并且一个接一个地多次在其中加载大型图像。

问题:

WebView在加载图像后未释放内存

如果所有WebView实例都被销毁几秒钟,内存似乎就会释放。我们从XAML树中删除了代码中的所有引用。我们在调试器中签入所有实例都已在该点释放

这个解决方案是有问题的,因为web视图必须死一段时间才能启动内存清理,对于我们的用例来说是不可接受的

如何复制:

使UWP C app或C++ UWP APP >添加WebVIEW->加载大随机图像的图像->内存不断增长。< /P> 我们只有一个活动的WebView,并且一个接一个地多次在其中加载大型图像。 我们随机化图像url的一部分,以模拟不同的广告负载

内存不断增长,就好像图像永远不会被释放一样。 我们尝试的是:

使用WebView.ClearTemporaryWebDataAsync清除缓存,但它没有任何作用。 手动触发GC。 注:

我们使用此WebViewWebViewExecutionMode.SeparateThread初始化webview。 其他执行模式似乎没有帮助。 我们不使用WebViewBrush。 UWP应用程序WebView内存泄漏,无法清除图像

是复杂的元素。而且它有自己的垃圾收集规则,为了保持渲染性能,它会缓存大量数据,导致内存不断增长,gc进程缓慢。我们不能两全其美

根据我的经验,您可以将源设置为about:blank,这样可以立即释放大部分数据

private void AppBarButton_Click(object sender, RoutedEventArgs e)
{
    int count = 0;
    var timer = new DispatcherTimer() { Interval = TimeSpan.FromSeconds(1) };
    timer.Start();
    timer.Tick += (s, p) =>
    {
        TestWebView.Source = new Uri("about:blank");
        count++;
        if (count == 20)
        {
            timer.Stop();
        }
    };      
}

这很有效。它仍然有点粗糙,但它在实践中起作用。有时这需要几分钟的时间,但迟早会发生。谢谢你,尼科。