1. Dashboard
  2. Forum
    1. Unerledigte Themen
  3. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team-Mitglieder
    4. Trophäen
    5. Mitgliedersuche
  4. Tutorial Bereich
  • Anmelden
  • Registrieren
  • Suche
Dieses Thema
  • Alles
  • Dieses Thema
  • Dieses Forum
  • Seiten
  • Forum
  • Lexikon
  • 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
  • Christoph R.
    16
    Christoph R.
    Mitglied
    Reaktionen
    36
    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
    14
    emptyvi
    Logo 2012, Platz 2.
    Reaktionen
    102
    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. :frowning_face:

    Liebe Grüße


    ¤¸¸.•´¯`•¸¸.•..>> Join the herd, join "My Little Pony @ TU-Wien" <<..•.¸¸•´¯`•.¸¸¤
    ¤¸¸.•´¯`•¸¸.•..>> (100% Twilight Sparkle approved) <<..•.¸¸•´¯`•.¸¸¤


    PP-Tutor WS2011 - WS2014
    EVC-Tutor SS2015


  • Christoph R.
    16
    Christoph R.
    Mitglied
    Reaktionen
    36
    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.
    16
    Christoph R.
    Mitglied
    Reaktionen
    36
    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.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!

Benutzerkonto erstellen Anmelden

Benutzer online in diesem Thema

  • 2 Besucher

Rechtliches

Impressum

Datenschutzerklärung