Skip to content

feat: make ProcessSnapshotProvider a singleton actor to persist metadataCache (#18)#28

Merged
ShadyUnderLight merged 1 commit intomainfrom
fix/issue18-metadata-cache-singleton
Apr 20, 2026
Merged

feat: make ProcessSnapshotProvider a singleton actor to persist metadataCache (#18)#28
ShadyUnderLight merged 1 commit intomainfrom
fix/issue18-metadata-cache-singleton

Conversation

@ShadyUnderLight
Copy link
Copy Markdown
Owner

修复内容

问题ProcessSnapshotProviderMonitorViewModel 的实例变量。每次 MonitorViewModel 重建(如 App 重启、状态重置),ProcessSnapshotProvider 实例也跟着重建,其中持有的 metadataCache 全量丢失,导致 macOS 系统进程 PID 需要重新触发 NSRunningApplication 查询,开销显著。

修复:将 ProcessSnapshotProvider 改为全局单例 actor (static let shared),MonitorViewModel 改为引用 ProcessSnapshotProvider.shared。即使 MonitorViewModel 重建,只要 App 进程不退出,metadataCache 就持续有效。

// 修复后:使用单例
actor ProcessSnapshotProvider {
    static let shared = ProcessSnapshotProvider()
    // ...
}

// MonitorViewModel
private let processProvider = ProcessSnapshotProvider.shared

影响范围

  • 功能新增:缓存跨 view model 生命周期持久化
  • 行为不变:对外接口和查询结果完全一致
  • metadataCache 的 30 秒过期 / 按有效 PID 裁剪逻辑不变

@ShadyUnderLight ShadyUnderLight merged commit 3127c46 into main Apr 20, 2026
2 checks passed
@ShadyUnderLight ShadyUnderLight deleted the fix/issue18-metadata-cache-singleton branch April 20, 2026 09:39
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant