web-dev-qa-db-ja.com

Java 7 WatchServiceは他の人にとって遅いですか?

WatchServiceは素晴らしいテクノロジーのように見えますが、私がテストしたOSXおよび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 を参照)

誰かがこれを本番環境で成功裏に使用していますか?

48
sbook

変更すると、応答時間が大幅に短縮されます

folder.register(watcher, StandardWatchEventKinds.ENTRY_MODIFY);

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

JDK 7には、MacOS用のWatchServiceのネイティブ実装がまだありません。ネイティブファイルシステムイベントをリッスンするのではなく、フォールバックSun.nio.fs.PollingWatchServiceを使用します。これは、ファイルシステムを定期的にトラバースし、ツリー内の各ファイルとサブディレクトリの最終変更タイムスタンプをチェックします。また、使用できないほど遅いことがわかりました。

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

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

私はそれを自分で使おうとはしていません。

28
karlgold