首页 > 解决方案 > 长时间管理 UWP WebView 整体内存消耗

问题描述

TL;博士

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

概述:

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

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

问题:

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

我们尝试过的:

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

如何清除 UWP WebView 缓存? 我们试图这样做,但我们没有观察到任何明显的结果。此外,我们担心使用此方法,因为它似乎将其应用于所有 WebView(其中一些我们甚至可能无法控制) 这在引擎盖下做了什么?

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

问题

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

我们将不胜感激来自社区的任何帮助/见解!很高兴根据需要提供更多信息。

标签: c#windowswebviewuwpwindows-10-desktop

解决方案


推荐阅读