Skip to content

Y-ASLant/MemoryCleanr

Repository files navigation

Memory Cleanr

Windows 内存清理工具,基于 Rust + GPUI 构建。提供实时内存监控、可配置的清理区域、系统托盘常驻,以及一键优化。

功能

  • 实时内存监控 — 物理内存与虚拟内存使用情况,环形进度图可视化,约每 5 秒自动刷新
  • 一键清理 — 按所选区域依次执行;进度与结果摘要显示在底部按钮内(完成后保留约 5 秒)
  • 可配置清理区域 — 8 种内存区域通过复选框勾选(待机列表与普通/低优先级互斥)
  • 系统托盘 — 右键菜单(优化内存、显示/隐藏窗口、退出);左键单击显示主窗口
  • 窗口行为 — 标题栏齿轮菜单可配置置顶、关闭时隐藏到托盘、调试日志
  • 自定义标题栏 — 设置、展开/收起、最小化、关闭(无最大化按钮)
  • 配置持久化%APPDATA%\MemoryCleaner\settings.toml,首次运行自动创建
  • 调试日志 — 可选写入程序目录下的 App.log,按行内时间戳自动清理 7 天前的记录
  • 自动提权 — 启动时检测管理员权限,不足时触发 UAC 提升
  • 单实例 — 重复启动时激活已有窗口
  • 平台 UI 适配 — Windows 11 使用默认圆角;Windows 10 自动切换直角按钮、卡片、对话框等(build < 22000)
  • 界面国际化 — 简体中文 / English,窗口行为对话框中可切换;默认「跟随系统」(通过 GetUserDefaultUILanguage 检测)

系统要求

项目 要求
操作系统 Windows 10 / 11 桌面版(64 位);Windows 11 为 build ≥ 22000
Rust 1.96 或更高(Edition 2024)
构建工具 MSVC(Visual Studio Build Tools 或 Visual Studio)
其他 可用 GPU 驱动;大部分清理操作需管理员权限

快速开始

构建

make build
#
cargo build --release

构建产物:target/release/MemoryCleanr.exe

运行

cargo run
# 或(推荐,需管理员权限)
cargo run --release

程序启动时会自动请求 UAC 提权。若用户拒绝,部分清理操作将失败。

界面说明

主窗口固定宽度 520px,高度随展开状态变化(折叠约 294px,展开约 456px),自上而下分为:

  1. 标题栏 — 应用名称、窗口行为(齿轮图标)、展开/收起(箭头图标)、最小化、关闭
  2. 内存卡片 — 物理内存与虚拟内存环形图(默认始终可见)
  3. 展开面板 — 点击箭头后展开「清理区域」复选框面板
  4. 一键清理 — 底部操作按钮;清理进度与结果直接显示在按钮内

默认折叠,仅显示内存卡片与清理按钮;展开后窗口自动增高以容纳清理区域设置。窗口行为(置顶、关闭隐藏到托盘、调试日志、语言)通过标题栏齿轮图标打开的对话框配置;点击弹窗外空白区域不会关闭对话框。

界面截图(Windows 10 / 11 对比)

实机运行对比(序号 1–4 两平台一致):

Windows 10(直角) Windows 11(圆角)
1 · 折叠 Win10 折叠 Win11 折叠
2 · 窗口行为 Win10 窗口行为 Win11 窗口行为
3 · 展开 Win10 展开 Win11 展开
4 · 窗口行为(展开背景) Win10 窗口行为-展开 Win11 窗口行为-展开

Windows 10 / 11 界面风格

启动时通过 RtlGetVersion 检测系统 build 号,自动调整 gpui-component 主题圆角,无需用户配置:

系统 条件 界面
Windows 11 build ≥ 22000 默认圆角(radius 6px / radius_lg 8px)
Windows 10 build < 22000 直角(radius / radius_lg 为 0,关闭组件阴影)

按钮、GroupBox 卡片、开关、复选框、对话框、设置面板等均跟随主题 radius;内存环形图保持圆形。实现见 src/ui/theme.rssrc/win32/os.rs

清理区域

区域 说明 需要管理员
工作集 清空所有进程工作集
系统文件缓存 释放系统文件缓存
已修改页面 刷写已修改页面列表
待机列表 清空备用列表
待机列表(低优先级) 清空低优先级备用列表
合并页面 释放合并页面
已修改文件 清理各固定磁盘的已修改文件缓存
注册表缓存 刷写注册表缓存

「待机列表」与「待机列表(低优先级)」只能二选一,勾选其一会自动取消另一项。

默认启用的区域:工作集、系统文件缓存、已修改页面、待机列表、合并页面、已修改文件(位掩码 111)。

配置项

配置文件:%APPDATA%\MemoryCleaner\settings.toml

配置项 类型 默认值 说明
always_on_top bool false 窗口始终置顶
close_to_notification_area bool true 点击关闭时隐藏到托盘而非退出
show_virtual_memory bool true 显示虚拟内存卡片(仅配置文件,暂无 UI 开关)
memory_areas u32 111 清理区域位掩码(各 MemoryAreas 标志位之和)
language string "auto" 界面语言:auto(跟随系统)、zh-CNen
debug_logging bool false 将详细运行信息写入程序目录下的 App.log

技术栈

依赖 用途
Rust 1.96+ 语言与运行时
GPUI(Zed 源码) GPU 加速 UI 框架
gpui-component UI 组件(Button、Checkbox、Switch、GroupBox、ProgressCircle 等)
windows-rs 0.62 Win32 API(内存管理、权限、窗口控制)
tray-icon 系统托盘图标与菜单
smol 异步定时与阻塞任务卸载
rust-i18n 界面国际化(locales/zh-CN.yml

项目结构

assets/                  # 界面截图(Win10 / Win11 对比,1–4 序号一致)
├── Win10_1.png          # 折叠
├── Win10_2.png          # 窗口行为对话框
├── Win10_3.png          # 展开
├── Win10_4.png          # 窗口行为(展开背景)
├── Win11_1.png
├── Win11_2.png
├── Win11_3.png
└── Win11_4.png

locales/
└── zh-CN.yml            # 中英文 UI 文案(rust-i18n _version: 2 格式)

src/
├── main.rs              # 入口:UAC 提权、单实例检查、locale 初始化、托盘安装、GPUI 窗口初始化
├── app.rs               # 应用状态、内存轮询、优化流程、托盘事件、语言切换
├── locale.rs            # locale 应用、列表分隔符、系统语言映射
├── log.rs               # 调试日志写入 App.log,按行内时间戳清理过期记录
├── memory.rs            # 内存查询(GlobalMemoryStatusEx)
├── optimize.rs          # 8 种清理区域与 NtSetSystemInformation 调用
├── privileges.rs        # Windows 特权提升
├── settings.rs          # TOML 配置读写
├── tray.rs              # 系统托盘图标与右键菜单
├── version.rs           # 版本常量
├── win32/               # Windows API 封装
│   ├── mod.rs
│   ├── nt.rs            # NtSetSystemInformation 等 NT 原语
│   ├── os.rs            # RtlGetVersion 检测 Win10/Win11、GetUserDefaultUILanguage 系统语言
│   ├── single_instance.rs  # 单实例互斥量
│   └── window.rs        # 窗口置顶、隐藏到托盘等
└── ui/                  # UI 组件
    ├── mod.rs
    ├── layout.rs        # 窗口尺寸与间距常量
    ├── memory_card.rs   # 内存环形图卡片
    ├── settings_page.rs # 清理区域面板、窗口行为对话框、清理按钮
    ├── theme.rs         # 主题初始化与 Win10 直角适配
    └── title_bar.rs     # 自定义标题栏

常见问题

为什么需要管理员权限?

大部分清理操作通过 NtSetSystemInformation 等内核接口完成,需要 SeProfileSingleProcessPrivilegeSeIncreaseQuotaPrivilege 等特权。程序启动时会自动检测并请求 UAC 提权。

释放内存会导致系统变慢吗?

Windows 会按需将常用页面重新加载到内存。清理后短期内可能因缓存重建而略有延迟,但不会造成长期影响;在内存紧张时,主动清理可释放更多可用内存。

如何查看日志?

  • 始终可用: 诊断信息通过 OutputDebugString 输出,可用 DebugView 查看(Release 构建无控制台窗口)。
  • 调试日志: 在标题栏齿轮菜单中开启「调试日志」后,详细运行信息写入程序目录下的 App.log(与 MemoryCleanr.exe 同目录)。每行格式为 [unix_secs.millis] 消息;写入新日志时会自动删除时间戳早于 7 天的旧行。

About

Windows Memory Cleanr

Topics

Resources

License

Stars

2 stars

Watchers

1 watching

Forks

Packages

 
 
 

Contributors