问题描述
ProcessSnapshotProvider 的 metadataCache 是实例变量。如果 MonitorViewModel 重建了 ProcessSnapshotProvider(如 app 重启某些阶段、settings 变更触发 reload),之前缓存的所有进程 metadata(appName、bundleIdentifier)全部丢失。
metadataRefreshInterval 默认 30 秒,同一台机器上进程 metadata 在 app 生命周期内变化极少,但每次 app 重启都重新走一遍 NSRunningApplication 全量查询,浪费。
预期结果
metadataCache 持久化,不随 ProcessSnapshotProvider 实例销毁而丢失。
建议方案
- 将
ProcessSnapshotProvider 本身设计为 singleton actor(或通过 DI container 管理单例)
- 或者将
metadataCache 提取为独立 persistent actor,生命周期与 app 对齐
- 快速方案:
ProcessSnapshotProvider 增加 init(existingCache: ...) 支持注入已有 cache
问题描述
ProcessSnapshotProvider的metadataCache是实例变量。如果MonitorViewModel重建了ProcessSnapshotProvider(如 app 重启某些阶段、settings 变更触发 reload),之前缓存的所有进程 metadata(appName、bundleIdentifier)全部丢失。metadataRefreshInterval默认 30 秒,同一台机器上进程 metadata 在 app 生命周期内变化极少,但每次 app 重启都重新走一遍NSRunningApplication全量查询,浪费。预期结果
metadataCache 持久化,不随 ProcessSnapshotProvider 实例销毁而丢失。
建议方案
ProcessSnapshotProvider本身设计为 singleton actor(或通过 DI container 管理单例)metadataCache提取为独立 persistent actor,生命周期与 app 对齐ProcessSnapshotProvider增加init(existingCache: ...)支持注入已有 cache