none
DirectoryInfo.GetFiles verursacht viel Netzwerktraffic RRS feed

  • Frage

  • Hallo,

    ich habe eine Synchronisationsfunktion geschrieben, die das Datum der Dateien in einem lokalen Verzeichnis mit dem Datum der Dateien auf einem SharePoint-Share (Zugriff über UNC-Pfad) vergleicht. Dazu gehe ich in einer ForEach-Schleife durch alle Dateien auf dem Share, die ich mit DirectoryInfo.GetFiles erhalte. Dies verursacht scheinbar sehr großen Netzwerktraffic. In der Doku finde ich dazu leider nichts. Gibt es eine bessere Methode das Datum der Datei zu ermitteln?

    Die Funktion muss auf den Share mit UNC-Pfad zugreifen, da es für einen SharePoint-Share und für einen Netzwerk-Share funktionieren muss, ich kann also keine speziellen SharePoint-Funktionen verwenden. Bei einem Netzwerk-Share scheint aber nicht soviel Traffic verursacht zu werden.

    Viele Grüße und vielen Dank im Voraus

    Elke

    Montag, 21. März 2016 05:54

Antworten

  • Hallo Elke,

    nach dem Artikel Should SharePoint Replace File Servers? sind die Freigaben von SharePoint teurer als einfache Netzwerk-NTFS-Freigaben. In diesem Zusammenhang interpretiere ich teurer mit Aufwändiger und Langsamer.

    Was heißt sehr großem Netzwerktraffic? Ich könnte mir vorstellen, dass der SharePoint-Server eine höhere Auslastung hat und deswegen es länger Dauert bis du die Antwort bekommst. Aber ist es wirklich so, dass MEHR Daten über das Netzwerk gehen?

    Da deine Lösung sowohl für NTFS-Freigaben als auch für SharePoint-Freigaben funktionieren muss, werde ich dir nicht empfehlen von den SharePoint-Freigaben weg zu gehen. Ich empfehle dir mal die Funktion DirectoryInfo.GetFiles() durch DirectoryInfo.EnumerateFiles()  zu ersetzen. Denn bei dieser Funktion muss das Programm nicht erst warten bis alle Informationen vollständig gesammelt wurden (was bei SharePoint länger dauern kann). Laut der Doku kann EnumerateFiles() bei vielen Dateien und Ordnern effizienter sein. Vielleicht bringt es ja auch bei dir etwas.


    Gruß
    Rudolf

    "Der Nachteil der Intelligenz besteht darin, dass man ununterbrochen gezwungen ist, dazuzulernen." Georg Bernhard Shaw



    • Bearbeitet Rudolf Grauberger Montag, 21. März 2016 10:25
    • Als Antwort markiert ElkeG Donnerstag, 24. März 2016 18:46
    Montag, 21. März 2016 10:23
  • Hallo Elke,

    in diesem Fall würde ich erstmal schauen was an daten durch die Leitung rauscht wenn du ganz normal mit dem Windows Explorer auf die Freigabe gehst.

    Um das Netzwerk zu entlasten würde ich mir nur mit Directory.GetFiles die Datei namen holen und anschließend einzeln die Änderungsdaten nachladen, hierbei hast du den vorteil das du die Last beschränken kannst.

    • Als Antwort markiert ElkeG Donnerstag, 24. März 2016 18:46
    Montag, 21. März 2016 12:26

Alle Antworten

  • Hallo Elke,

    nach dem Artikel Should SharePoint Replace File Servers? sind die Freigaben von SharePoint teurer als einfache Netzwerk-NTFS-Freigaben. In diesem Zusammenhang interpretiere ich teurer mit Aufwändiger und Langsamer.

    Was heißt sehr großem Netzwerktraffic? Ich könnte mir vorstellen, dass der SharePoint-Server eine höhere Auslastung hat und deswegen es länger Dauert bis du die Antwort bekommst. Aber ist es wirklich so, dass MEHR Daten über das Netzwerk gehen?

    Da deine Lösung sowohl für NTFS-Freigaben als auch für SharePoint-Freigaben funktionieren muss, werde ich dir nicht empfehlen von den SharePoint-Freigaben weg zu gehen. Ich empfehle dir mal die Funktion DirectoryInfo.GetFiles() durch DirectoryInfo.EnumerateFiles()  zu ersetzen. Denn bei dieser Funktion muss das Programm nicht erst warten bis alle Informationen vollständig gesammelt wurden (was bei SharePoint länger dauern kann). Laut der Doku kann EnumerateFiles() bei vielen Dateien und Ordnern effizienter sein. Vielleicht bringt es ja auch bei dir etwas.


    Gruß
    Rudolf

    "Der Nachteil der Intelligenz besteht darin, dass man ununterbrochen gezwungen ist, dazuzulernen." Georg Bernhard Shaw



    • Bearbeitet Rudolf Grauberger Montag, 21. März 2016 10:25
    • Als Antwort markiert ElkeG Donnerstag, 24. März 2016 18:46
    Montag, 21. März 2016 10:23
  • Hallo,

    vielen Dank für die Antwort. Mit viel Traffic meine ich, dass wirklich etliche Megabyte über die Leitung gehen, obwohl ist nur das Änderungsdatum und den Dateinamen aller Dateien in allen Verzeichnissen (zugegeben, es sind ein paar) haben möchte.

    EnumerateFiles habe ich eben probiert, es geht leider nicht viel schneller und schickt in etwa genauso viele Megabyte über die Leitung. Mit der Langsamkeit könnte ich notfalls noch leben, aber durch die vielen Megabytes die über die Leitung geschickt werden, leidet das ganze Firmennetzwerk.

    Viele Grüße

    Elke

    Montag, 21. März 2016 10:57
  • Hallo Elke,

    in diesem Fall würde ich erstmal schauen was an daten durch die Leitung rauscht wenn du ganz normal mit dem Windows Explorer auf die Freigabe gehst.

    Um das Netzwerk zu entlasten würde ich mir nur mit Directory.GetFiles die Datei namen holen und anschließend einzeln die Änderungsdaten nachladen, hierbei hast du den vorteil das du die Last beschränken kannst.

    • Als Antwort markiert ElkeG Donnerstag, 24. März 2016 18:46
    Montag, 21. März 2016 12:26
  • Hallo,

    vielen Dank. Ich habe jetzt rausgefunden, dass ich durch einen Programmfehler immer mehrfach mit GetFiles und GetDirectories auf das gleiche Verzeichnis zugegriffen habe *peinlich*. Jetzt ist es schon deutlich weniger Traffic. Ich werde jetzt erstmal bei GetFiles bleiben.

    Viele Grüße

    Elke

    Mittwoch, 23. März 2016 14:21