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

2024-03-20

Problem:

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

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

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

如何重现:

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

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

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

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

Notes:

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

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

WebView https://learn.microsoft.com/en-us/uwp/api/windows.ui.xaml.controls.webview是复杂元素。而且它有自己的垃圾收集规则,为了保持渲染性能,它会缓存大量数据,导致内存不断增长,GC过程很慢。我们不能两者兼得。

根据我的经验,您可以设置WebView https://learn.microsoft.com/en-us/uwp/api/windows.ui.xaml.controls.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();
        }
    };      
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

UWP 应用程序 WebView 泄漏内存,无法清除图像 的相关文章

  • UWP StoreProductQueryResult 不返回任何产品

    我们无法返回 Windows 应用商店应用程序的附加产品列表 我们在 Windows 应用商店中有一个包含 3 个订阅附加组件的应用程序 这些附加组件被标记为隐藏 因为我们不希望它们只能通过我们的应用程序在商店中可见 我们正在开发针对 Wi
  • 如何从 UWP(又名 .NET Core)中的 Type 对象获取 Assembly

    Type 类在 NET Framework 中有一个Assembly 属性 然而 当您编写使用 NET Core 的 UWP 时 此属性就消失了 仅 AssemblyQualifiedName 属性可用 我怎样才能从这个名字进入Assemb
  • 无法打开目标 = 空白的 Electron webview 链接

    我正在使用 Electron 我有一个显示外部网站的 webview 但我无法成功显示通常由该网站上的链接打开且目标 blank 的附加窗口 a href mentions html target blank Mentions l gale
  • 使用cmake创建UWP包

    我正在开发简单的 hello world 应用程序 main cpp include
  • 从 TypeScript 调用 Android 方法

    Android 将 JS 接口注入到 Web 视图中 JavaScriptInterface javaScriptInterface new JavaScriptInterface this browser addJavascriptInt
  • Android 上带有 asynctask 的 Webview

    我想做的是进度对话框等待加载项目webview 我该怎么做dialog dismiss 事件取决于加载项目webview public class asynctask extends AsyncTask
  • 如何在关闭阶段后清除 Javafx Webview 内存使用情况

    我尝试在JavaFX中使用webview制作UI 但是有一个问题 当使用popup打开大图像时 内存使用量非常大 并且当popup关闭时 内存使用量不会下降 我明白了通过 Windows 中的任务管理器查看内存使用情况 当使用webview
  • Chrome 应用程序 localStorage 不持久并且 chrome.storage 不工作

    我有一个 chrome Kiosk 应用程序 我需要在机器打开和关闭之间保存数据 几个字节作为字符串 但无论我尝试什么 本地存储似乎在重新启动时都会被擦除 当我转到 chrome inspect apps 检查 Chrome 应用程序时 控
  • Android Web 视图中隐藏在键盘下方的文本框

    我创建了一个简单的 iPhone Android 应用程序 包含一个普通的 Web 视图 这个网络视图调用我的网站 在我的网站上有几种输入类型 文本或文本区域的表单 当它们位于页面底部时 我遇到了问题 1 在我的iPhone应用程序中 键盘
  • 使用 pinvoke 从 UWP C# 应用程序调用 LoadLibrary

    我正在尝试从 C UWP 应用程序调用非托管 dll 中的方法 我这样做 但在非托管 dll 上调用 LoadLibrary 以便我可以使用它 这一切在调试模式下工作正常 但是在发布模式下 我收到一个奇怪的错误 消息 类初始化方法 Test
  • 视频无法以全屏模式播放

    当我尝试在全屏浏览中播放嵌入视频时 出现 NPE 它在 3 0 蜂窝中运行良好 但在 ICS 4 0 中运行不佳 知道如何解决这个问题吗 java lang NullPointerException at android webkit Pl
  • Android:在以下情况下如何在html中引用css文件

    hi在我的应用程序中 我需要在 webview 中显示一个 html 页面 并且该 html 页面应该引用 css 文件的 sdcard 位置 使用 link href 标签 我在 sdcard gt mibook 中放置了 2 个文件 即
  • 如何在android中使用webview明智地显示Html内容页面?

    您好 我创建了一个简单的应用程序来在 webview 中显示 html 页面 我使用 webview 并显示页面加载时间 如下所示 此后禁用滚动并使用下一个和上一个按钮来后退和前进包含 所以我的代码如下 首先onCreate显示添加webv
  • Webview没有清除缓存

    为了清除 WebView 的缓存 我使用了 webview getSettings setAppCacheEnabled false webview clearCache true webview loadUrl about blank w
  • JavaScript接口注入漏洞修复

    我收到了来自 Google Play 管理中心的警告 提示我这一页 https support google com faqs answer 9095419因为我在我的应用程序中使用了 JavaScript 接口 并建议两个选项来解决该问题
  • Windows 10 ScrollIntoView() 不会滚动到列表视图中间的项目

    我有一个包含 20 个项目的列表视图 我想以编程方式滚动列表视图 ListView ScrollIntoView ListView Items 0 将滚动列表视图到第一项 ListView ScrollIntoView ListView I
  • 在 UWP(W10) 中使用 HttpClient 发出 POST 请求

    我正在使用通用 Windows 平台制作应用程序 我想问如何使用 httpclient 将 id 1 这样的数据发布到服务器 我知道网上有一些教程 但其中很多都是针对 Windows 8 1 的 在 10 中不起作用 如果你想在UWP中处理
  • 弹出窗口或弹出窗口显示附加信息

    我想在我的应用程序顶部显示带有附加信息的弹出窗口 我的信息是Listview大约 500 个项目我都尝试过 有问题flyout gt 它里面可能有scrollViewer 所以我的列表视图不能正确虚拟化 其他一切都可以 有我的代码 Flyo
  • 键盘加速器在 UWP 应用中停止工作

    我正在尝试将键盘加速器添加到 UWP 应用程序中的 CommandBar 菜单项 当应用程序启动时 这工作正常 但在我第一次打开溢出菜单后 加速器停止工作 这似乎不会发生在主要命令 菜单之外 上 只有溢出菜单内的辅助命令才会发生 此外 单击
  • NativeScript:禁用 iOS WebView 缩放控件的方法?

    我正在尝试找出一种方法来防止用户通过捏合手势和双击来放大和缩小 iOS WebView tns ios 3 4 1 本质上禁用所有缩放 就像苹果之前使用的 html 元标记一样让用户决定是否要使用 iOS 10 及更高版本进行缩放 我找到了

随机推荐

  • 将字符串数组转换为 numpy 数组

    我正在尝试转换字符串 0 0 1 到一个 numpy 数组 这是我写的代码 但需要更复杂吗 arr s 0 0 1 arr append int s split 1 replace arr append int s split 3 repl
  • 将一张纸的某个范围复制到另一张纸中的某个特定单元格

    Workbooks 1 Worksheets 1 Copy after wb2 Sheets 1 上面的代码总是覆盖以前的内容 但这不是我想要的 如何将特定范围复制到特定单元格中的其他工作表 我必须复制的示例 sheet1 range A5
  • DrawingContext 装饰器 - 可以绘制堆栈面板吗?

    使用DrawingContext类我已经能够使用DrawRectangle 成功地将装饰器添加到我的 adornedElement 的方法 是否可以构建一个堆栈面板 其中包含文本框和图像 并将其指定为装饰器 顺便说一下 我使用的是 Visu
  • 在 Java 中计算多元正态 CDF

    有谁知道有一个可靠 准确的库来计算 Java 中的多元正态 MVN CDF 我正在寻找类似的东西MATLAB mvnpdf 函数 http www mathworks com help stats mvncdf html 我需要能够对最多
  • libavcodec/swscale 的输出损坏,具体取决于分辨率

    我正在编写一个视频会议软件 我有一个 H 264 流 使用 libavcoded 解码为 IYUV 然后在无窗口模式下使用 VMR9 渲染到窗口中 我使用 DirectShow 图形来执行此操作 为了避免不必要的 RGB 和反转换 请参阅l
  • 使每个选项卡具有相同的宽度并且可扩展

    我正在尝试实现类似浏览器中的选项卡之类的功能 所有选项卡必须具有相同的宽度并且可以扩展 因此当选项卡很多时 它们需要调整大小并适合窗口 就像 Chrome 或 Firefox 所做的那样 问题 如果某个选项卡的文本多于其他选项卡 则该选项卡
  • HKSampleQuery 只会返回过去 7 天的值?

    这是一个 WatchOS 应用程序 通过测试 此代码似乎只会返回我手动添加到健康应用程序中的不到 1 周的体重值 这是故意的吗 周围的路 func getUserBodyMass completion escaping HKQuantity
  • 如何使用 Ember.RSVP.onerror 在没有错误处理程序的情况下报告被拒绝的 Promise 的异常

    我刚刚看了这个video http www youtube com watch v L9OOMygo1HI最近与 ember core 框架开发人员进行的小组讨论 在视频中 每个小组成员都被要求分享一个通用的调试技巧 Tom Dale 调用
  • 钩子中的 React 类组件的 this.props.history.push('/some_route') 相当于什么?

    我正在努力实现这个目标 import isAuthorized from somewhere async componentDidMount const authorized await isAuthorized if authorized
  • 正则表达式模式与 ruby​​ on Rails 的形式

    使用 form for 时是否支持模式属性 我正在尝试组合正则表达式模式以确保电话号码的格式正确 我的问题是模式属性不会仅采用正则表达式字符串 doesnt work 因此 当我将正则表达式写为字符串时 它会导致问题 例如必须转
  • 通过 Bash 传递命令行参数

    在温习 bash 时 已经有一段时间了 我惊讶地发现执行这段代码 另存为 script sh echo Arg 0 to script sh 0 echo Arg 1 to script sh 1 function echo args ec
  • 远程注册

    我知道关于远程注册表访问已经讨论过几次 但我找不到任何关于如何实现这一点的好例子 我确实找到了http www codeproject com KB cs cpimpersonation1 aspx http www codeproject
  • 如何拦截Hibernate生成的SQL?

    对于一个像老大哥一样工作的安全系统 比如受监视的强制访问控制 我们必须拦截并处理 hibernate 生成的所有 select 语句 我们将用户 时间戳和 sql 选择存储在数据库中 以便使用其他工具进行一些分析 这些信息可以确定用户试图查
  • SignalR WebRTC WebSocket 已处于 CLOSING 或 CLOSED 状态

    我想测试运行 SignalR 和 WebRTC 的最简单实现 我将代码托管在https github com foyzulkarim WebRtc https github com foyzulkarim WebRtc 我制作了两个不同的文
  • 在 AngularJS 中集成 jQuery 插件的正确方法

    我想知道将 jQuery 插件集成到我的 Angular 应用程序中的正确方法是什么 我找到了几个教程和截屏视频 但它们似乎适合特定的插件 例如 http amitgharat wordpress com 2013 02 03 an app
  • 优化 iPhone / iPod touch 上的二进制应用程序大小

    我知道用户只能通过 3G 下载最多 20MB 而我的构建 发布 iphoneos 显示我的应用程序为 26MB 我正在链接到 Three20 iPhone 框架 这是提交到 App Store 时计入 20MB 最大值的最终大小吗 我能做些
  • Angular 2 中的条件验证

    Angular 2 中的验证非常简单 这非常棒 然而 如果选择了其他字段 如何将必填字段设置为可选字段 这是我的规则 this contractsFilter this fb group selectedContractType Valid
  • 如何从url中提取域名?

    如何使用 bash 从 url 中提取域名 喜欢 http example com http example com 到 example com 必须适用于任何 TLD 而不仅仅是 com 您可以使用简单的AWK方式提取域名 如下所示 ec
  • 如何将整数放入数字数组[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我想将像 123456 这样的数字放入数字数组中 您能给我一个关于该过程的提示吗 我可以定义一个元素数量未知的数组吗 首先计算数字的个数
  • UWP 应用程序 WebView 泄漏内存,无法清除图像

    Problem WebView 加载图像后不释放内存 如果所有 WebView 实例都被销毁几秒钟 内存似乎会被释放 我们从 XAML 树中删除并清除了代码中的所有引用 我们在调试器中检查了当时所有实例都已释放 这个解决方案是有问题的 因为