gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 03:04:54 25 4
gpt4 key购买 nike

问题:

WebView 加载图像后不释放内存。

如果所有 WebView 实例都被销毁几秒钟,内存似乎会被释放。我们从 XAML 树中删除并清除了代码中的所有引用。 (我们在调试器中检查了当时所有实例都已释放。)

这个解决方案是有问题的,因为 WebView 必须停止一段时间才能启动内存清除,这对于我们的用例来说是 Not Acceptable 。

如何重现:

制作 UWP C# 应用或 C++ UWP 应用 -> 添加 WebView -> 使用随机 URL 加载大图像 -> 内存不断增长。

我们只有一个事件的 WebView,并且我们在其中多次加载一张大图像。(我们随机化部分图片网址来模拟不同的广告负载。)

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

  • 使用 WebView.ClearTemporaryWebDataAsync() 清除缓存,但它没有执行任何操作。
  • 手动触发GC。

注释:

  • 我们使用“WebView(WebViewExecutionMode.SeparateThread)”初始化 webview。(其他执行模式似乎没有帮助)。
  • 我们不使用 WebViewBrush。

最佳答案

UWP App WebView Leaks Memory, doesn't clear images

WebView是复杂元素。而且它有自己的垃圾收集规则,为了保持渲染性能,它会缓存大量数据,导致内存不断增长,GC过程很慢。我们不能两者兼得。

根据我的经验,您可以设置 WebView重复来源为“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();
}
};
}

关于webview - UWP 应用程序 WebView 泄漏内存,无法清除图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59266925/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com