1. Weiterleitung zu NetzLiving.de
  2. Forum
    1. Unerledigte Themen
  3. zum neuen Forum
  • Anmelden
  • Suche
Dieses Thema
  • Alles
  • Dieses Thema
  • Dieses Forum
  • Seiten
  • Forum
  • Erweiterte Suche
  1. Informatik Forum
  2. Webmaster & Internet
  3. Entwicklung

Rekursives Durchsuchen von Verzeichnissen über Samba

  • Christoph R.
  • 4. November 2013 um 18:02
  • Unerledigt
Hallo zusammen,

das Informatik-Forum geht in den Archivmodus, genaue Informationen kann man der entsprechenden Ankündigung entnehmen. Als Dankeschön für die Treue bekommt man von uns einen Gutscheincode (informatikforum30) womit man bei netzliving.de 30% auf das erste Jahr sparen kann. (Genaue Infos sind ebenfalls in der Ankündigung)

Vielen Dank für die Treue und das Verständnis!
  • Christoph R.
    Punkte
    2.626
    Beiträge
    428
    • 4. November 2013 um 18:02
    • #1

    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?

  • emptyvi
    Punkte
    2.037
    Beiträge
    374
    • 4. November 2013 um 18:41
    • #2

    Hm.. direkt wissen tue ich es nicht. Hätte bei Google http://stackoverflow.com/questions/1496…ava-samba-win-7 gefunden. Das erklärt aber imho nicht, warum das dir einigermaßen schnell geht. Vielleicht bringts trotzdem was, dunno. :(

    Liebe Grüße

  • Christoph R.
    Punkte
    2.626
    Beiträge
    428
    • 4. November 2013 um 18:58
    • #3

    Seiten zur Beschleunigung des Netzwerks unter Windows 7 habe ich schon einige gelesen. Davon hat nichts geholfen. Das Netzwerk an sich ist ja auch nicht das Problem, weil das Listen direkt von der Kommandozeile aus ja effizient ist (inzwischen habe ich es auch in C# implementiert und es ist ebenfalls effizient). Es liegt also unmittelbar an der Windows-Implementierung vom JDK. :mad:

    Ich könnte mir vorstellen dass das JDK auf generische Betriebssystemfunktionen zum Dateizugriff zurückgreift, während die Shell und .NET erkennen dass es Samba ist und spezifische System Calls machen. Macht das Sinn?

    Kennt jemand eine andere Implementierungsmöglichkeit zum rekursiven Traversal an Stelle von File.isDirectory() und File.list()?

  • Christoph R.
    Punkte
    2.626
    Beiträge
    428
    • 5. November 2013 um 16:33
    • #4

    Um es für die Nachwelt festzuhalten: mit dem java.nio-Package geht es etwas schneller als mit java.io.File. Beschrieben wird das z.B. hier: http://stackoverflow.com/questions/1052…ively-in-java-7.

    Der Geschwindigkeitsvorteil ist unter allen Betriebssystemen spürbar, jedoch ist Windows+schnelles java.nio immer noch langsamer als Linux+langsames java.io. Anscheinend ist der Dateizugriff im Windows-JDK einfach ineffizient implementiert, aber da kann man halt nichts machen. Ist für mich auch nicht so tragisch.

  • Maximilian Rupp 27. Dezember 2024 um 00:26

    Hat das Thema aus dem Forum Programmieren nach Entwicklung verschoben.

  1. Datenschutzerklärung
  2. Impressum