2012-03-06 17 views
33

WatchServiceは素晴らしい技術のように見えますが、私がテストしたOS XおよびLinuxシステムでは役に立たないほど遅いです。傷害に侮辱を加えるために、それはすべての出来事のいずれかを通知するようには思われない。Java 7 WatchServiceは誰のために遅いですか?

これは、私自身のコードとOracleの正規の例の両方の場合です。 (http://docs.oracle.com/javase/tutorial/displayCode.html?code=http://docs.oracle.com/javase/tutorial/essential/io/examples/WatchDir.java

私は

https://wikis.oracle.com/display/OpenJDK/Mac+OS+X+Port+Project+Statusを参照)OS X OpenJDKのポートは、この機能が不明であることを認識し、誰もが成功すると、生産でこれを使用していますか?

+3

folder.register(watcher, StandardWatchEventKinds.ENTRY_MODIFY); 

を変更する場合、それは非常に迷惑な[既知の問題](https://bugs.openjdk.java.net/browse/だはるかに優れた応答時間を有しますJDK-7133447)since 2012. – andruso

+1

質問は「OS XとLinux」を示しますが、答えとコメントはこれがOS Xでのみ問題であることを示しているようです。 –

答えて

24

JDK 7には、MacOS用のWatchServiceのネイティブ実装はまだありません。ネイティブのファイルシステムイベントをリスンするのではなく、フォールバックsun.nio.fs.PollingWatchServiceを使用します。これは、ファイルシステムを定期的にトラバースし、ツリー内の各ファイルおよびサブディレクトリの最後に変更されたタイムスタンプをチェックします。私はまた、それが異常に遅くなることを発見しました。私はそれを自分自身を使用するようにしようとしていない

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

Mac用WatchServiceのネイティブ実装があります。

+6

これはMacOS用のJDK 8のケースですか? @Ben、明らかにyes。 –

+2

私たちはまだ非常に遅く、すべての出来事を選んでいないために問題を抱えています。 –

+2

これはJDK 9でも解決されないようです。問題は引き続きhttps://bugs.openjdk.java.net/browse/JDK-7133447で公開されており、過去のメーリングリストの議論には解決策がありませんでした:http://mail.openjdk.java.net/pipermail/ nio-dev/2014-August/002691.html。 –

30

私は

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

StandardWatchEventKinds enumはcom.sun。*パッケージに含まれています。 – eskatos

+0

はい!それが私のために作ったものなので、私はそれを使うまで4〜5秒遅れていました。参考までに私が作成したスクリプトはここにあります:https://gist.github.com/DinisCruz-Dev/9214909 –

+0

私と同じですが、私は少なくとも4秒の遅れがありました。 LinuxまたはWindows。どうもありがとう。 –

関連する問題