­

.NET桌面程序應用WebView2組件集成網頁開發3 WebView2的進程模型

  WebView2 運行時使用與 Microsoft Edge 瀏覽器相同的進程模型。

WebView2 運行時中的進程

  WebView2 進程組是 WebView2 運行時進程的集合。 WebView2 進程組包括以下內容:

  • 單個瀏覽器進程。
  • 一個或多個渲染器(呈現器)進程。
  • 其他幫助程序進程,例如 GPU 進程和音頻服務進程。

當WebView2應用程序使用WebView2功能時,WebView2進程組中進程的數量和存在可能會發生變化。(但是,WebView2進程組中只有一個特定的瀏覽器進程。)例如,從同一個 CoreWebView2Environment 市裡創建新的WebView2實例,但在源屬性中使用不同的域,通常會啟動一個新的渲染器進程。

渲染器進程的數量可能會根據以下情況而變化:

  • 在WebView2運行時中使用站點隔離功能。請參見每幀渲染器進程-站點隔離
  • 在使用同一用戶數據文件夾的WebView2實例中呈現的不同斷開連接的源的數量。

控制何時創建這些額外進程的邏輯取決於Chromium體系結構,並且超出了 WebView2 運行時的範圍。

 

下面是在真實項目中測試的結果

(1)電腦關機,重新開機,未運行Edge瀏覽器,且未運行與WebView2相關的宿主應用程序。

後台進程中有5個默認Edge進程在運行

(2)運行「建築工程施工圖AI審查系統」,其中紅色框內是使用WebView2組件加載的網頁應用

任務管理器中,進程「Zjgsgts.Sczj」下啟動了7個WebView2的子進程

其中某個第1個、第2個進程是渲染器進程,因為三維模型的渲染過程消耗的內存較多。第3、4、5、6、7是GPU進程或者其他幫助類程序進程。

而瀏覽器進程依然為5個,說明其中一個是 WebView2 進程組中的瀏覽器進程。

在宿主程序的根目錄下多了兩個文件夾
  • runtimes 目錄
    • 結構如下圖,包含一個WebView2運行時加載器組件  WebView2Loader.dll 。

  •  Zjgsgtsc.Sczj.exe.WebView2 目錄
    • 結構圖下圖,裏面包含運行過程中其他的輔助配置信息以及緩存等信息
關於該目錄信息,在後續的博客中會詳解介紹。
WebView2 運行時進程和用戶數據文件夾

  WebView2 運行時進程集合中的所有進程都綁定到瀏覽器進程,而瀏覽器進程又與單個用戶數據文件夾相關聯。 如果應用程序使用多個用戶數據文件夾,將為每個用戶數據文件夾創建 WebView2 運行時進程的集合。

  用戶數據文件夾可由多個應用程序共享,但請務必考慮對性能和管理的影響,如「管理用戶數據」文件夾中所述。

  若要使用多個用戶數據文件夾,WebView2 應用程序需要創建不同的 CoreWebView2Environment 對象。 WebView2通過配置的對象為給定用戶數據文件夾創建CoreWebView2Environment實例。 每個 CoreWebView2Environment 對象都需要使用不同的用戶數據文件夾值進行配置。

  為給定的用戶數據文件夾創建第一個WebView2實例時,將啟動與該用戶數據文件夾關聯的WebView2運行時進程集合的瀏覽器進程。所有其他進程都將在該瀏覽器進程的生命周期內進行管理。

  CoreWebView2Environment代表一個用戶數據文件夾及其相關進程的集合。給定的渲染器進程與單個CoreWebView2實例不關聯,因為渲染器進程可以為使用同一用戶數據文件夾的多個CoreWebView2實例中的幀提供服務,具體取決於網站隔離。請參見每幀渲染器進程-站點隔離

處理進程事件和生命周期

若要對瀏覽器和渲染器進程中的崩潰和掛起做出反應,請使用 CoreWebView2 的 ProcessFailed 事件。

若要安全地關閉相關的瀏覽器和渲染器進程,請使用 CoreWebView2Controller 的 Close 方法。

若要打開瀏覽器任務管理器,請調用 OpenTaskManagerWindows 方法。

其他事件,請參考 WebView2 API