Ich habe ein Java-Programm zum Synchronisieren meines Desktop-PCs mit meinem Notebook geschrieben. Das Programm läuft auf dem Desktop-PC, muss aber natürlich auch die über Samba erreichbare Datenpartition meines Notebooks rekursiv durchsuchen.
Ich habe auf beiden Rechnern sowohl Windows 7 als auch Ubuntu mit derselben Java-Version 7.0. Für folgenden Test habe ich sämtliche Funktionen meines Programms auskommentiert und nur noch das rekursive Durchsuchen meiner Notebook-Partition drin gelassen: Wenn der Desktop-PC mit dem Java-Programm unter Ubuntu läuft, dann ist das Programm wesentlich schneller (~1 Minute) als wenn er unter Windows 7 läuft (~8 Minuten). Welches Betriebssystem auf meinem Notebook gestartet ist (wo also auch der Samba-Server läuft) ist für die Laufzeit egal. Eine schlechte Konfiguration des Samba-Servers, was ja die naheliegendste Ursache wäre, ist damit ausgeschlossen.
Was das ganze noch eigenartiger macht: ein "dir /s \\notebook\data" (rekursives dir) in der Kommandozeile von Windows 7 ist ebenfalls schnell.
Langsam ist das Durchsuchen also nur, wenn es
1. von Java aus
und
2. von einem Windows-Rechner aus passiert.
Testhalber habe ich auch die Rollen von PC und Notebook vertauscht: selbes Ergebnis. Es liegt also anscheinend wirklich am Betriebssystem.
Hat jemand eine Erklärung für dieses Verhalten? Bzw. weiß jemand was die java.io.File-Klasse da eigenartiges treiben könnte, das die Laufzeit so massiv beeinträchtigt?