[feat] 降低后台时webview2内存占用
Author: scoliaCreated Sep 7, 2026Updated Sep 10, 2026
描述你的建议
如题,现在即使程序在后台不渲染,webview2依旧有100mb左右的占用,可以在进入后台时,通过set_memory_usage_level设置为low,降低内存占用。
use tauri::Manager;
use windows_core::Interface;
pub fn setup_memory_optimization(app: &tauri::App) -> Result<(), Box<dyn std::error::Error>> {
let app_handle = app.handle().clone();
if let Some(window) = app.get_webview_window("main") {
window.on_window_event(move |event| {
if let tauri::WindowEvent::Focused(focused) = event {
set_memory_usage_level(&app_handle, !focused);
}
});
}
Ok(())
}
fn set_memory_usage_level(app: &tauri::AppHandle, low: bool) {
if let Some(window) = app.get_webview_window("main") {
let webview = window.as_ref();
let _ = webview.with_webview(move |wv| {
#[cfg(windows)]
unsafe {
use webview2_com::Microsoft::Web::WebView2::Win32::{
COREWEBVIEW2_MEMORY_USAGE_TARGET_LEVEL_LOW,
COREWEBVIEW2_MEMORY_USAGE_TARGET_LEVEL_NORMAL,
ICoreWebView2_19,
};
let controller = wv.controller();
let core_webview = match controller.CoreWebView2() {
Ok(v) => v,
Err(_) => return,
};
let webview_19 = match core_webview.cast::<ICoreWebView2_19>() {
Ok(v) => v,
Err(_) => return,
};
let level = if low {
COREWEBVIEW2_MEMORY_USAGE_TARGET_LEVEL_LOW
} else {
COREWEBVIEW2_MEMORY_USAGE_TARGET_LEVEL_NORMAL
};
let _ = webview_19.SetMemoryUsageTargetLevel(level);
}
});
}
}Source: codexu/note-gen