【问题标题】:Best Cocoa way to monitor several thousand files for move, delete and rename?监控数千个文件以进行移动、删除和重命名的最佳 Cocoa 方法?
【发布时间】:2014-11-28 04:30:57
【问题描述】:

我有一个应用程序,该应用程序将文件数据库保存在用户计算机上,或者可能保存在可能在线也可能不在线的联网卷上。该数据库可能是位于不同文件夹中的数千个文件。当文件名发生更改、移动或删除时,监控它们以接收通知的最佳方法是什么?

我之前曾将 FSEvents 用于单个目录,但我猜测它不能很好地扩展到几千个单独的文件。使用 kqueue 怎么样?

我也许可以尝试维护一个动态的文件夹列表,试图用尽可能少的文件夹包含所有文件,但这意味着阅读完整列表并尝试找出共同的祖先等。

想法或建议?

【问题讨论】:

  • 哪些性能测量会导致您得出 FSEvent 无法扩展的结论?
  • 如果我添加几个目录和几千个文件,我不会担心,但是单独添加几千个文件似乎有很多开销。如果它显然走错了路,我不想花费时间和精力来构建它。
  • 了解 Spotlight 引擎如何监控文件系统会很有趣。如果他们使用其他/私有 API,我会感到惊讶。

标签: file cocoa fsevents kqueue


【解决方案1】:

来自 Apple 的文档:

如果您要监控大量的内容层次结构,您应该使用 然而,文件系统事件,因为内核队列是 比内核事件稍微复杂一些,并且可能是更多的资源 密集,因为额外的用户内核通信 参与。

https://developer.apple.com/library/mac/documentation/Darwin/Conceptual/FSEvents_ProgGuide/KernelQueues/KernelQueues.html#//apple_ref/doc/uid/TP40005289-CH5-SW2

【讨论】:

  • 当尝试添加 4,000 个文件(因此是 4,000 个)fsevent 观察者时,我开始在控制台中收到错误:fseventsd: implementation_added_client : failed to add client for path /Volumes/path/to/one/of /my/files 后跟:fseventsd: implementation_register_rpc: implementation_added_client() => 22
猜你喜欢
  • 2012-09-02
  • 1970-01-01
  • 2012-07-07
  • 1970-01-01
  • 1970-01-01
  • 2011-03-31
  • 2019-08-17
  • 1970-01-01
  • 2015-03-09
相关资源
最近更新 更多