0

File.listFiles()Win 7 クライアントから SAMBA フォルダーを介してJava を呼び出すと非常に遅く、実際には Mac クライアントからの呼び出しよりもほぼ 100 倍遅いことがわかりました。(どちらのクライアントも Java 7 を実行しています)。両方のクライアントは当然、同じ 1GB LAN 上にあります。ある顧客が Win XP クライアントでテストしたところ、Win7 クライアントよりもはるかに優れたパフォーマンスが得られました。これを解決する方法を知っている人はいますか?

タイミングを含むいくつかのテスト データ: SAMBA (「QNAP」NAS ディスク) 上の 31 のフォルダーの一覧表示:

勝つ 7:

リスティング \\nas\Public\David\Remote 株式: 0.0s
\\nas\Public\David\Remote Stocks\Animals のリスト: 0.093 秒
リスト \\nas\Public\David\Remote Stocks\Animals\.jalbum: 0.312s
\\nas\Public\David\Remote Stocks\Animals\.jalbum\thumbs のリスト: 0.405 秒
リスト \\nas\Public\David\Remote Stocks\album: 1.248s
\\nas\Public\David\Remote Stocks\album\Animals のリスト: 1.31 秒
\\nas\Public\David\Remote Stocks\album\Animals\thumbs のリスト: 1.388 秒
\\nas\Public\David\Remote Stocks\album\Animals\slides のリスト: 1.762 秒
リスト \\nas\Public\David\Remote Stocks\album\Animals\res: 2.542s
リスト \\nas\Public\David\Remote Stocks\album\Sports: 2.761s
\\nas\Public\David\Remote Stocks\album\Sports\thumbs のリスト: 2.839 秒
\\nas\Public\David\Remote Stocks\album\Sports\slides のリスト: 3.229 秒
リスト \\nas\Public\David\Remote Stocks\album\Sports\res: 3.978s
リスト \\nas\Public\David\Remote Stocks\album\res: 4.196s
\\nas\Public\David\Remote Stocks\album\Scenic のリスト: 4.695 秒
\\nas\Public\David\Remote Stocks\album\Scenic\thumbs のリスト: 4.773 秒
\\nas\Public\David\Remote Stocks\album\Scenic\slides のリスト: 5.194 秒
\\nas\Public\David\Remote Stocks\album\Scenic\res のリスト: 5.99 秒
リスト \\nas\Public\David\Remote Stocks\album\People: 6.208s
リスト \\nas\Public\David\Remote Stocks\album\People\thumbs: 6.302s
\\nas\Public\David\Remote Stocks\album\People\slides のリスト: 6.692 秒
リスト \\nas\Public\David\Remote Stocks\album\People\res: 7.472s
リスト \\nas\Public\David\Remote Stocks\.jalbum: 7.659s
リスト \\nas\Public\David\Remote Stocks\Sports: 7.768s
リスト \\nas\Public\David\Remote Stocks\Sports\.jalbum: 7.909s
リスト \\nas\Public\David\Remote Stocks\Sports\.jalbum\thumbs: 7.987s
\\nas\Public\David\Remote Stocks\Scenic のリスト: 8.486 秒
リスト \\nas\Public\David\Remote Stocks\Scenic\.jalbum: 8.642s
\\nas\Public\David\Remote Stocks\Scenic\.jalbum\thumbs のリスト: 8.72 秒
リスト \\nas\Public\David\Remote Stocks\People: 9.282s
リスト \\nas\Public\David\Remote Stocks\People\.jalbum: 9.422s

Mac での同じリスト:

リスト /Volumes/Public/David/Remote Stocks: 0.0s
リスト /Volumes/Public/David/Remote Stocks/Animals: 0.013s
リスト /Volumes/Public/David/Remote Stocks/Animals/.jalbum: 0.018s
リスト /Volumes/Public/David/Remote Stocks/Animals/.jalbum/thumbs: 0.022s
リスト /Volumes/Public/David/Remote Stocks/album: 0.027s
リスト /Volumes/Public/David/Remote Stocks/album/Animals: 0.03s
リスト /Volumes/Public/David/Remote Stocks/album/Animals/thumbs: 0.032s
リスト /Volumes/Public/David/Remote Stocks/album/Animals/slides: 0.034s
リスト /Volumes/Public/David/Remote Stocks/album/Animals/res: 0.038s
リスト /Volumes/Public/David/Remote Stocks/album/Sports: 0.04s
リスト /Volumes/Public/David/Remote Stocks/album/Sports/thumbs: 0.042s
リスト /Volumes/Public/David/Remote Stocks/album/Sports/slides: 0.046s
リスト /Volumes/Public/David/Remote Stocks/album/Sports/res: 0.05s
リスト /Volumes/Public/David/Remote Stocks/album/res: 0.052s
リスト /Volumes/Public/David/Remote Stocks/album/Scenic: 0.058s
リスト /Volumes/Public/David/Remote Stocks/album/Scenic/thumbs: 0.064s
リスト /Volumes/Public/David/Remote Stocks/album/Scenic/slides: 0.068s
リスト /Volumes/Public/David/Remote Stocks/album/Scenic/res: 0.074s
リスト /Volumes/Public/David/Remote Stocks/album/People: 0.08s
リスト /Volumes/Public/David/Remote Stocks/album/People/thumbs: 0.082s
リスト /Volumes/Public/David/Remote Stocks/album/People/slides: 0.085s
リスト /Volumes/Public/David/Remote Stocks/album/People/res: 0.089s
リスト /Volumes/Public/David/Remote Stocks/.jalbum: 0.091s
リスト/ボリューム/パブリック/デビッド/リモート株式/スポーツ: 0.103 秒
リスト /Volumes/Public/David/Remote Stocks/Sports/.jalbum: 0.106s
リスト /Volumes/Public/David/Remote Stocks/Sports/.jalbum/thumbs: 0.108s
リスト/ボリューム/パブリック/デビッド/リモート ストック/シーニック: 0.11 秒
リスト /Volumes/Public/David/Remote Stocks/Scenic/.jalbum: 0.122s
リスト /Volumes/Public/David/Remote Stocks/Scenic/.jalbum/thumbs: 0.124s
リスト/ボリューム/パブリック/デビッド/リモート株式/人: 0.126s
リスト /Volumes/Public/David/Remote Stocks/People/.jalbum: 0.133s

最後に、ネットワーク ラグの影響を克服するために、Windows でマルチスレッド リストを実行しようとしました。9 秒から 3 秒、つまり 3 倍速くなりましたが、MacBook Pro クライアントで測定した 0.133 秒よりもパフォーマンスが大幅に低下しました。

4

2 に答える 2

2

Files.walkFileTree APIを使用して問題を解決しました。これにより、1 つの SAMBA ネットワーク IO 呼び出しで、フォルダーのすべてのファイルのすべての属性を取得できます。

于 2014-09-23T17:38:41.000 に答える
1

Windows の既知の問題に出くわしたと思います。

この記事が役立つかもしれません: http://www.sysprobs.com/windows-7-network-slow

編集:

問題が古い SMB プロトコルによって公開された共有に接続するときのオペレーティング システムの悪い動作によるものではないことが確実な場合、それは JDK 実装に起因する (前代未聞ではない) 遅さです。

OpenJDK および Oracle Java の(公開されていない) 抽象クラスjava.io.File.listFiles()のメソッドへのデリゲートは、 、、およびによってプラットフォーム固有の方法で実装されます。String [] list()java.io.FileSystemjava.io.UnixFileSystemjava.io.Win32FileSystemjava.io.WinNTFileSystem

それらのlist()機能は常にnative.

以前、Windows XP でのファイル ブラウジングに関して同様の問題がありました。これは長い間、JRE の未解決のバグでした。

于 2013-02-19T17:54:37.290 に答える