# 工作区启动加载性能实测(2026-10-01) 工作副本:`D:/eagle`。Windows 11 10.0.26200,AMD Ryzen 7 8845H,D 盘 NTFS,SVN 1.14.5;当前源码的 release 优化构建,包含 Windows 状态路径修复。清单共 13 项(含目录与 SVN 管理文件),SVN 变更列表 3 项。当前进程没有 USN 卷读取权限,实测使用元数据扫描回退路径。 ## 测量范围 测量启动恢复工作区时使用的原生数据请求:状态加载与本地版本号查询并行,无缓存场景同时查询仓库元信息。每轮清除原生内存缓存,使用独立临时磁盘缓存,不改动工作副本内容、原有应用缓存或设置。每轮结果与完整 SVN 状态对照,并断言无缓存走 Full、磁盘恢复走 Reuse。 这里的“无缓存”指没有应用缓存,文件系统缓存已预热;不是重启系统后的冷盘。计时包含 SVN 子进程启动,但不包括 OrcaSVN 应用进程创建、WebView 启动、Tauri IPC、前端 localStorage 恢复、忽略规则过滤、Vue 渲染或后台快照落盘。磁盘缓存场景假设前端仓库元信息缓存也已存在。不能将本表当作点击软件图标到界面可操作的总耗时。 ## 最后一组实测 每种场景 7 次。此前两组复测的总耗时中位数分别为无缓存 57.1 / 52.8 ms、磁盘缓存 42.3 / 44.3 ms。下表为结束并发合成仓库准备任务后的最后一组。 | 次数 | 无缓存状态 ms | 无缓存总计 ms | 磁盘恢复状态 ms | 磁盘恢复版本号 ms | 磁盘恢复总计 ms | | --- | ---: | ---: | ---: | ---: | ---: | | 1 | 60.4 | 60.5 | 5.8 | 39.0 | 39.0 | | 2 | 54.9 | 54.9 | 6.7 | 48.1 | 48.1 | | 3 | 52.8 | 52.8 | 9.9 | 56.6 | 56.7 | | 4 | 58.2 | 58.2 | 7.2 | 52.2 | 52.2 | | 5 | 59.6 | 59.6 | 7.0 | 49.9 | 49.9 | | 6 | 57.8 | 57.8 | 6.9 | 48.2 | 48.2 | | 7 | 58.9 | 58.9 | 7.0 | 46.5 | 46.5 | | 场景 | 总耗时最小值 ms | 中位数 ms | 最大值 ms | | --- | ---: | ---: | ---: | | 无缓存加载 | 52.8 | 58.2 | 60.5 | | 磁盘缓存恢复 | 39.0 | 48.2 | 56.7 | 缓存恢复的状态检查中位数为 7.0 ms,本地版本号请求中位数为 48.1 ms。此工作副本的原生数据阶段主要等待 `svn info --show-item revision` 进程完成;本次结果不足以解释用户感知的整个软件启动耗时,也不能代表大工作副本。 ## 重跑 PowerShell,在项目根目录运行: ```powershell $env:ORCASVN_BENCH_WORKSPACE = 'D:/eagle' cargo test --release --manifest-path src-tauri/Cargo.toml benchmark_workspace_startup -- --ignored --nocapture ``` 测试为显式运行的 ignored 基准,正常回归测试不会访问用户工作副本。临时缓存随测试结束清理。若测试过程中工作副本内容发生变化,结果一致性断言可能失败,需要保持工作副本稳定后重测。 Release 回归测试结果:56 项通过,2 项性能基准默认忽略。原生 USN 用例因拒绝访问提前返回,不能据此认定 USN 快路径已验证。 原有 20,000 文件合成基准在临时仓库的首次提交阶段等待超过四分钟,已主动终止并清理;未获得有效性能结果,这段准备耗时不计入工作区加载结果。 ## 合成工作副本结果 同一天、同一台机器上另建真实本地 SVN 仓库,并检出工作副本。以下场景均为干净工作副本、release 构建、元数据扫描回退路径,每种场景测量 7 次,继续采用上述计时边界。 | 版本控制文件数 | 提交数 | 无应用缓存加载中位数 ms | 磁盘缓存恢复中位数 ms | | ---: | ---: | ---: | ---: | | 1,000 | 200 | 59.6 | 51.3 | | 10,000 | 1,000 | 112.4 | 46.7 | | 10,000 | 10,000 | 109.3 | 43.1 | 这些是先后采样的结果,不是同时进行的严格对照,不能据此声称增加提交历史使加载更快。数据为约数百字节的小文本文件,不能代表大型二进制、复杂 externals、大量未版本文件、冷盘或网络盘工作副本。 测试工作副本路径: - `D:/OrcaSVN-bench-1000-200/wc`:1,000 文件、200 提交。 - `D:/OrcaSVN-bench-10000-1000/wc`:10,000 文件,提交数已从 1,000 追加到 10,000;目录名沿用初始名称。 最终核验包含 r1–r10000 连续、每次提交均有路径变更、10,000 个版本控制文件和工作副本干净。每个测试目录的 `manifest.json` 记录最终规模;`startup-benchmark.log` 保存初次基准,追加历史后的结果保存在 `startup-benchmark-r10000.log`。这些本机文件未纳入项目 Git 仓库。 ## 单独测量 svn status 在最终的 10,000 文件、10,000 提交干净工作副本上,通过 PowerShell 顺序运行 `svn status --xml` 10 次,丢弃 XML 输出,计时包含 SVN 子进程创建和输出接收: | 指标 | 毫秒 | | --- | ---: | | 最小值 | 59.6 | | 中位数 | 63.35 | | 最大值 | 69.5 | 原始采样为 `63.6, 65.0, 59.6, 63.1, 61.8, 60.4, 64.5, 62.1, 69.5, 67.0` ms。这个结果只描述当前本机热缓存场景;启动数据基准还包含文件系统清单、缓存处理和并发元信息请求,不能将其整体耗时等同于单独 `svn status`。 测量与查看日志分页时,在 OrcaSVN 中打开上述 `wc`,而不是 `repo` 目录。日志页默认 20 条,因此 10,000 次提交可用于测试连续前后翻页与筛选,但本报告未测量日志查询耗时或界面绘制。