c# - 长时间管理 UWP WebView 整体内存消耗
问题描述
TL;博士
我们正在寻找一种方法来强制 UWP Webview 为我们的库清除任何缓存的资产/内存。我们的目标是能够重用相同的 WebView,而无需调用可能对同一主机应用程序中的其他 WebView 产生不利影响的方法。
概述:
我们维护一个 C# SDK,它利用 WebView 来显示广告。我们针对单页展示广告的高级工作流程包括:
- 当用户希望显示广告时创建 WebView。我们将 UWP webview 作为 SeperateProcess 运行。
- 使用 WebView 的 "NavigateToString("")" 方法将一些任意 HTML/JavaScript 加载到 webview
- 在 20-30 秒间隔后重新使用相同的 WebView 以使用“NavigateToString”显示另一个广告。
- 从 XAML 树中删除广告后,将 WebView 设置回 about:blank / 空字符串。
问题:
我们观察到 WebView 进程的内存使用量在后台继续增加。我们的期望是,在我们将 webview 导航到不同的 HTML/JS 片段后,我们应该在一段明显的时间后观察到下降。我们正在使用 ProcessExplorer 来观察 WWAHost.exe 进程的峰值工作集和线程数。我们确认托管内存中没有任何泄漏。
我们尝试过的:
UWP App WebView Leaks Memory,不清除图像- 我们目前正在使用它。在 12 小时的观察期内,它似乎减缓了逐渐增加的速度。加载新广告后,我们等待大约一分钟,我们注意到工作集内存减少了。但是这种方法有点“hacky”。
如何清除 UWP WebView 缓存? 我们试图这样做,但我们没有观察到任何明显的结果。此外,我们担心使用此方法,因为它似乎将其应用于所有 WebView(其中一些我们甚至可能无法控制) 这在引擎盖下做了什么?
此外,我们知道理论上我们可以强制执行 GC.Collect() - 但如果我们可以提供帮助,我们宁愿不这样做。
问题
有没有一种优雅的方式来强制清除 WebView 的缓存?我们目前采用的方法似乎有点奏效,但我们想知道是否还有其他尚未找到的选项。
我们将不胜感激来自社区的任何帮助/见解!很高兴根据需要提供更多信息。
解决方案
推荐阅读
- python - 如何从另一个列表中删除空列表?
- user-interface - 使用 backgroundWorker 时 C++ GUI 写入文本框
- oracle - Oracle 表单圆角按钮
- javascript - 使用 vanilla JS 从页面中删除渲染图像?
- android - Kotlin 协程 mvvm 从模型返回值
- php - laravel 为 foreach() 提供的一对多无效参数
- sql - 如何将 2 个条件计数查询组合成一个查询?
- python - 将此元组列表转换为字典
- c# - 如何在有 HttpGetAttribute 的地方添加 HttpHeadAttribute?
- html - 结合 rowspan 和 colspan 的引导程序