From 147d13f04ea296f88c48fa6f58c9f02362f2027e Mon Sep 17 00:00:00 2001 From: Linanwanttodo Date: Wed, 2 Sep 2026 18:20:33 +0800 Subject: [PATCH] perf(desktop): switch to the mimalloc global allocator glibc keeps freed pages in its arena, so RSS did not fall back after the webview was destroyed. mimalloc returns freed memory to the OS, letting the resident footprint settle right after the UI closes. --- Cargo.lock | 19 +++++++++++++++++++ apps/desktop/src-tauri/Cargo.toml | 1 + apps/desktop/src-tauri/src/lib.rs | 5 +++++ 3 files changed, 25 insertions(+) diff --git a/Cargo.lock b/Cargo.lock index 2e4661a..e5618ff 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1177,6 +1177,7 @@ dependencies = [ "axum", "cursor-server", "libc", + "mimalloc", "rfd", "serde", "serde_json", @@ -3417,6 +3418,15 @@ version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b6d2cec3eae94f9f509c767b45932f1ada8350c4bdb85af2fcab4a3c14807981" +[[package]] +name = "libmimalloc-sys" +version = "0.1.49" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a45a52f43e1c16f667ccfe4dd8c85b7f7c204fd5e3bf46c5b0db9a5c3c0b8e9" +dependencies = [ + "cc", +] + [[package]] name = "libredox" version = "0.1.19" @@ -3604,6 +3614,15 @@ dependencies = [ "autocfg", ] +[[package]] +name = "mimalloc" +version = "0.1.52" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2d4139bb28d14ad1facf21d5eb8825051b326e172d216b39f6d31df53cc97862" +dependencies = [ + "libmimalloc-sys", +] + [[package]] name = "mime" version = "0.3.17" diff --git a/apps/desktop/src-tauri/Cargo.toml b/apps/desktop/src-tauri/Cargo.toml index 10c01dd..44fd06a 100644 --- a/apps/desktop/src-tauri/Cargo.toml +++ b/apps/desktop/src-tauri/Cargo.toml @@ -15,6 +15,7 @@ tauri-build = { version = "2", features = [] } axum = "0.8" cursor-server = { path = "../../../server" } libc = "0.2" +mimalloc = "0.1" rfd = "0.15" serde = { version = "1", features = ["derive"] } serde_json = "1" diff --git a/apps/desktop/src-tauri/src/lib.rs b/apps/desktop/src-tauri/src/lib.rs index cef6375..1bbe442 100644 --- a/apps/desktop/src-tauri/src/lib.rs +++ b/apps/desktop/src-tauri/src/lib.rs @@ -6,6 +6,11 @@ mod startup; mod tray; mod update; +// mimalloc 在释放时主动向操作系统归还内存,避免 glibc 保留页导致 +// 关闭窗口后 RSS 无法回落到静默启动水平。 +#[global_allocator] +static GLOBAL_ALLOCATOR: mimalloc::MiMalloc = mimalloc::MiMalloc; + pub fn run() -> std::process::ExitCode { if let Some(exit_code) = update::run_replacement_if_requested() { return exit_code;