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