Java 7 WatchService 对其他任何人来说很慢吗?

2022-08-31 19:55:32

WatchService看起来是一项很棒的技术,但它太慢了,在我测试过的OS X和Linux系统上没有用处。为了增加伤害的侮辱,它似乎也没有得到所有事件的通知。

我自己的代码和Oracle的规范示例都是如此。(http://docs.oracle.com/javase/tutorial/displayCode.html?code=http://docs.oracle.com/javase/tutorial/essential/io/examples/WatchDir.java)

我认识到 OS X OpenJDK 端口不确定此功能(请参阅 https://wikis.oracle.com/display/OpenJDK/Mac+OS+X+Port+Project+Status)

有没有人在生产中成功地使用它?


答案 1

如果我更改,我的响应时间会好得多

folder.register(watcher, StandardWatchEventKinds.ENTRY_MODIFY);

folder.register(watcher, new WatchEvent.Kind[]{StandardWatchEventKinds.ENTRY_MODIFY}, SensitivityWatchEventModifier.HIGH);

答案 2

JDK 7 还没有 WatchService for MacOS 的本机实现。它不是侦听本机文件系统事件,而是使用回退 sun.nio.fs.PollingWatchService,该服务定期遍历文件系统并检查树中每个文件和子目录的上次修改时间戳。我还发现它非常慢。

WatchService for Mac 有一个本机实现:

http://code.google.com/p/barbarywatchservice/

我没有尝试自己使用它。


推荐