winforms 多个webview2示例共享一个渲染器进程

yb3bgrhw  于 2023-03-19  发布在  其他
关注(0)|答案(1)|浏览(319)

我有一个小型的WinForms应用程序,可以打开许多表单,每个表单都包含一个webview2控件的示例。在该控件中,我加载了一个存在于本地硬盘上的HTML文件。我的问题是,对于每个新表单,我创建我可以看到在任务管理器上创建了一个新的渲染器进程。这个新进程消耗了大量内存。是否可以在所有这些示例之间共享一个呈现器进程,因为它们都加载相同的HTML页面?

von4xj4u

von4xj4u1#

1.确保所有WebView2使用相同的环境。
1.确保WebView2中所有URI的来源相同。

1.环境

WebView2使用与Edge和Chrome浏览器相同的chromium进程模型。当您创建WebView2时,它与CoreWebView2Environment关联,您可以显式使用CoreWebView2Environment,或者如果您正在使用WebView2类,则还可以依赖默认CoreWebView2Environment。
如果两个WebView2共享同一个CoreWebView2Environment,那么它们将共享一些进程。至少浏览器进程和一些实用程序进程(如GPU进程和网络进程)将被共享。
呈现器进程是否共享取决于chromium进程模型的启发式规则,通常如果两个文档的URI来源匹配,那么呈现器进程将被共享。
您可以阅读更多关于the process model in WebView2 docs的信息。

2.同源

若要共享呈现器进程,您还需要WebView2s中的URI具有相同的来源。但是,http和https URI以外的其他URI(如文件URI),或者如果您使用NavigateToString或自定义URI方案,则可能会出现问题。您可以尝试使用CoreWebView2.SetVirtualHostNameToLocalFolderMapping创建实际Map到本地文件的虚拟https URI。

相关问题