管理 UWP WebView 长时间内的整体内存消耗

问题描述

TL;DR

我们正在寻找一种方法来强制 UWP Webview 清除我们库的任何缓存资产/内存。 我们的目标是能够重用相同的 WebView,而无需调用可能对同一宿主应用程序中的其他 WebView 产生不利影响的方法

概述:

我们维护一个 C# SDK,它利用 WebView 来显示广告。 我们针对单页展示广告的高级工作流程包括

  1. 用户希望展示广告时创建 WebView。我们将 UWP 网页视图作为单独进程运行。
  2. 使用 WebView 的 "NavigatetoString("")" 方法将一些任意 HTML/JavaScript 加载到 webview 中
  3. 在 20 到 30 秒的间隔后使用“NavigatetoString”重新使用相同的 WebView 来显示一个广告。
  4. 在从 XAML 树中删除广告后,将 WebView 设置回 about:blank/空字符串。

问题:

我们观察到 WebView 进程的内存使用量在幕后继续增加。 我们的期望是,在我们将 webview 导航到不同的 HTML/JS 片段后,我们应该在一段时间后观察到下降。 我们正在使用 ProcessExplorer 来观察 WWAHost.exe 进程的峰值工作集和线程数。 我们确认托管内存没有任何泄漏。

我们的尝试:

UWP App WebView Leaks Memory,doesn't clear images - 我们目前正在使用这个。在 12 小时的观察期内,它似乎减慢了逐渐增加的速度。加载新广告后,我们等待大约一分钟,我们注意到工作集内存减少。但是这种方法有点“hacky”。​​

How to clear UWP WebView cache? 我们已经尝试过这样做,但我们没有观察到任何明显的结果。此外,我们担心使用这种方法,因为它似乎适用于所有 WebView(其中一些我们甚至可能无法控制)这在幕后做了什么?

此外,我们知道理论上我们可以强制执行 GC.Collect() - 但如果我们可以提供帮助,我们宁愿不这样做。

问题

是否有一种优雅的方法可以强制清除 WebView 的缓存?我们目前采用的方法似乎有些奏效,但我们想知道表上是否还有我们尚未找到的其他选项。

我们非常感谢社区的任何帮助/见解!很高兴在必要时提供更多信息。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)