Appearance
功能特性
XSpace 是一款面向「磁盘空间分析与清理辅助」的桌面工具。它把扫描建模为一组正交维度(目标 / 过滤 / 聚合 / 排序 / 上限),用配置驱动,既能灵活组合,又能避免逐需求堆砌枚举导致的组合爆炸。
核心能力
- 多线程并行扫描:基于
jwalk目录层级并行 +rayon多根并行,扫描引擎充分利用多核。 - 单遍目录聚合:一次遍历中把每个目录的子树「大小 / 文件数」累加好,目录类查询不再对每个匹配目录重走子树(从 O(条目 + K×S) 降到 O(条目 × 深度),且仅目录聚合查询付出此代价)。
- 零成本空文件夹检测:遍历时即知某目录子项为空,无额外系统调用、无递归。
- 结果即时排序与上限:Top N 二分插入 + 截断,保持内存有界;或显示全部并在结束时统一排序。
- 结果复制 / 导出:单行复制、全部复制、导出 TXT。
- 智能跳过:自动跳过虚拟系统目录(
/dev、/proc、/sys)与云端按需文件同步目录(~/Library/CloudStorage),避免 macOS File Provider 扩展联网挂起导致卡死。
扫描模式一览
| 预设 | 目标 | 过滤 | 聚合 | 排序 | 上限 |
|---|---|---|---|---|---|
| 🔍 大文件 | 文件 | 大于阈值 | 无 | 大小 | TopN(阈值滑块) |
| 📄 空文件 | 文件 | 0 字节 | 无 | 大小 | 全部 |
| 📁 空目录 | 目录 | 无子项 | 无 | 路径 | 全部 |
| 🗂 搜文件 | 文件 | 名称包含/精确 | 无 | 大小 | 全部 / TopN |
| 📂 搜目录 | 目录 | 名称包含/精确 | 大小/文件数/两者 | 大小/文件数 | 全部 / TopN |
正交维度
目标(Target) × 过滤(Filter) × 聚合(Aggregate) × 排序(SortBy) × 上限(Limit) 五个轴独立配置。新需求只需调整轴取值,无需新增枚举变体。
性能设计
扫描引擎针对「全盘检索」做了若干针对性优化:
- 文件类查询零聚合成本:聚合做成可选相位,文件类查询(大文件 / 空文件 / 搜文件)完全不构造聚合结构。
- 并行阶段提前过滤:文件类查询在
process_read_dir(并行)阶段就丢弃不命中文件,消费端只遍历命中项 + 目录,避免串行遍历海量非命中文件。 - 按需分配:
file_name、entry.path()仅在真正需要时计算,避免为每一条目(百万级)做无谓字符串分配。 - 取消即时响应:遍历与预读每 4096 条目检查取消标志,命中即尽快退出。
性能预期
在 NVMe SSD + 页缓存命中的情况下,对 /Users 全盘检索大文件可在数秒级完成。冷盘 / HDD 下明显更慢,受物理 IO 限制。
