Search code examples
javaperformancenetwork-programmingsamba

Extremely slow file listing using Java + SAMBA + Win 7


I have identified that calling Java's File.listFiles() over a SAMBA folder from a Win 7 client is extremely slow, actually almost 100 times slower than from a Mac client. (Both clients are running Java 7). Both clients are naturally on the same 1GB LAN. A customer has tested from his Win XP client and received far better performance than from his Win7 client. Does anyone know how to resolve this?

Some test data, including timing: Listing 31 folders over SAMBA ("QNAP" NAS disk):

Win 7:

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

Same listing on Mac:

listing /Volumes/Public/David/Remote Stocks: 0.0s
listing /Volumes/Public/David/Remote Stocks/Animals: 0.013s
listing /Volumes/Public/David/Remote Stocks/Animals/.jalbum: 0.018s
listing /Volumes/Public/David/Remote Stocks/Animals/.jalbum/thumbs: 0.022s
listing /Volumes/Public/David/Remote Stocks/album: 0.027s
listing /Volumes/Public/David/Remote Stocks/album/Animals: 0.03s
listing /Volumes/Public/David/Remote Stocks/album/Animals/thumbs: 0.032s
listing /Volumes/Public/David/Remote Stocks/album/Animals/slides: 0.034s
listing /Volumes/Public/David/Remote Stocks/album/Animals/res: 0.038s
listing /Volumes/Public/David/Remote Stocks/album/Sports: 0.04s
listing /Volumes/Public/David/Remote Stocks/album/Sports/thumbs: 0.042s
listing /Volumes/Public/David/Remote Stocks/album/Sports/slides: 0.046s
listing /Volumes/Public/David/Remote Stocks/album/Sports/res: 0.05s
listing /Volumes/Public/David/Remote Stocks/album/res: 0.052s
listing /Volumes/Public/David/Remote Stocks/album/Scenic: 0.058s
listing /Volumes/Public/David/Remote Stocks/album/Scenic/thumbs: 0.064s
listing /Volumes/Public/David/Remote Stocks/album/Scenic/slides: 0.068s
listing /Volumes/Public/David/Remote Stocks/album/Scenic/res: 0.074s
listing /Volumes/Public/David/Remote Stocks/album/People: 0.08s
listing /Volumes/Public/David/Remote Stocks/album/People/thumbs: 0.082s
listing /Volumes/Public/David/Remote Stocks/album/People/slides: 0.085s
listing /Volumes/Public/David/Remote Stocks/album/People/res: 0.089s
listing /Volumes/Public/David/Remote Stocks/.jalbum: 0.091s
listing /Volumes/Public/David/Remote Stocks/Sports: 0.103s
listing /Volumes/Public/David/Remote Stocks/Sports/.jalbum: 0.106s
listing /Volumes/Public/David/Remote Stocks/Sports/.jalbum/thumbs: 0.108s
listing /Volumes/Public/David/Remote Stocks/Scenic: 0.11s
listing /Volumes/Public/David/Remote Stocks/Scenic/.jalbum: 0.122s
listing /Volumes/Public/David/Remote Stocks/Scenic/.jalbum/thumbs: 0.124s
listing /Volumes/Public/David/Remote Stocks/People: 0.126s
listing /Volumes/Public/David/Remote Stocks/People/.jalbum: 0.133s

I finally attempted to perform a multi threaded listing on Windows to overcome network lag effects. It helped somewhat, -from 9 to 3 seconds, i.e 3 times faster, but still significantly slower performance than the 0.133s measured from my MacBook pro client.


Solution

  • Problem solved by using the Files.walkFileTree API. With it I'm able to grab all attributes of all files of a folder with one SAMBA network IO call.