Delphi-PRAXiS
Seite 2 von 4     12 34      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   FileExists/FileDate - Auslesen über Netzwerk langsam (https://www.delphipraxis.net/190199-fileexists-filedate-auslesen-ueber-netzwerk-langsam.html)

dGeek 10. Sep 2016 22:06

AW: FileExists/FileDate - Auslesen über Netzwerk langsam
 
Mh ja ok. Ich arbeite die 10000 Dateien (eine StringListe) in nur in einem Thread ab.

Hier wäre jetzt die Parallel Library von XE7 schön denke ich.

himitsu 11. Sep 2016 00:00

AW: FileExists/FileDate - Auslesen über Netzwerk langsam
 
Keinem ist das fehlende FindClose aufgefallen?
10.000 offene Such-Handlesmachen sich bestimmt gut.

Nja, wenn es langsam ist, dann würde ich wenigstens die Dateiliste sortieren und Dateien im gleichen Verziechnis auch mit dem gleichen FindFirst+FindNext suchen.

dGeek 11. Sep 2016 00:16

AW: FileExists/FileDate - Auslesen über Netzwerk langsam
 
Zitat:

Nja, wenn es langsam ist, dann würde ich wenigstens die Dateiliste sortieren und Dateien im gleichen Verziechnis auch mit dem gleichen FindFirst+FindNext suchen.
Nicht das Suchen der Dateien ist das Problem. Dafür habe ich eine andere Funktion - von Luckie.

Das Problem ist eher, dass der Datums-Vergleich von 10.000 Dateien über das Netzwerk komischerweise solange dauert.

Zu den Handles: ich benutze mittlerweile folgende Anpassung:
Delphi-Quellcode:
function FileTimeToDateTime(FileTime: TFileTime): TDateTime;
var
 ModifiedTime: TFileTime;
 SystemTime: TSystemTime;
begin
 Result := 0;
 if (FileTime.dwLowDateTime = 0) and (FileTime.dwHighDateTime = 0) then
  Exit;
 try
  FileTimeToLocalFileTime(FileTime, ModifiedTime);
  FileTimeToSystemTime(ModifiedTime, SystemTime);
  Result := SystemTimeToDateTime(SystemTime);
 except
  Result := Now; // Something to return in case of error
 end;
end;

function getFileLastModified(const aFileName: string): TDateTime;
begin
 Result := FileTimeToDateTime(JclFileUtils.GetFileLastWrite(aFileName));
end;

Luckie 11. Sep 2016 00:40

AW: FileExists/FileDate - Auslesen über Netzwerk langsam
 
Es wird nie eine Exception auftreten. Guck doch mal in der Doku zu den Funktionen, die du nutzt. API Funktionen werfen keine Exceptions, sondern habe Rückgabewerte.

dGeek 11. Sep 2016 10:47

AW: FileExists/FileDate - Auslesen über Netzwerk langsam
 
Ist abgeändert.

Das Hauptproblem besteht aber noch immer und ich krieg nicht raus warum :(
Es liegt aber definitiv an FileExists und dem netzwerk. Andere Programme sind da extrem viel schneller.

zeras 11. Sep 2016 11:47

AW: FileExists/FileDate - Auslesen über Netzwerk langsam
 
Zitat:

Zitat von dGeek (Beitrag 1347384)
Ist abgeändert.

Das Hauptproblem besteht aber noch immer und ich krieg nicht raus warum :(
Es liegt aber definitiv an FileExists und dem netzwerk. Andere Programme sind da extrem viel schneller.

Da die anderen auch nicht zaubern können, muss wohl die Threadbearbeitung den Schub bringen.

t.roller 11. Sep 2016 11:47

AW: FileExists/FileDate - Auslesen ber Netzwerk langsam
 
Zitat:

Zitat von dGeek (Beitrag 1347356)
Es ist eine ganz normale Western Digital Festplatte an einem USB-Port meines Routers.
Wenn ich eine große Datei auf die Festplatte kopiere, so geschieht das mit den erwarteten 100 Megabit (~11 MByte sagt Windows)

Ein Netzwerk mit 100 Megabit ist für eine Festplatte sehr langsam.
Gibt es beim USB-Port auch eine Möglichkeit zu wählen, ob "schnelles Entfernen" oder "mit Cache"?
Das macht einen Unterschied um den Faktor 3.

jaenicke 11. Sep 2016 12:12

AW: FileExists/FileDate - Auslesen über Netzwerk langsam
 
Das ganze ist sehr einfach:
Andere Tools (auch meine) gehen die beiden Dateilisten einmal durch, speichern die Daten alle und vergleichen danach. Daher ist nur ein Abruf der Dateiliste nötig und die Dateidaten (Dateiname, -größe, -datum) sind ja in dieser Liste mit drin.

Du scheinst hingegen zuerst die Liste abzurufen und dann für jede Datei noch einmal die Dateiliste anzufragen um die Datumsinformationen zubekommen, zu fragen ob sie existiert, ... das dauert ewig.

dGeek 11. Sep 2016 12:17

AW: FileExists/FileDate - Auslesen über Netzwerk langsam
 
Zitat:

speichern die Daten alle und vergleichen danach.
Du meinst, dein Programm kopiert die Quelldaten zum Zielverzeichnis und DANACH wird erst geguckt, was im Zielverzeichnis gebraucht wird?

Bei mir ist es so:

ich gehe die Liste der Quelldaten einmal durch.
Dann wird immer geguckt:
- "Gibt es Quell-DateiX auch im Zielverzeichnis? (FileExists)
- JA > Quelldatei mit Zieldatei vergleichen (Datum)
- Quelldatei neuer als Zieldatei? JA > in eine andere Liste schreiben (keine StringList...)

Lasse ich FileExists und den Datumsvergleich weg, ist alles wunderbar zackig schnell.
Seltsam ist ja nur.. es ist NUR von PC-HDD zu Netzwerk-HDD langsam.

zeras 11. Sep 2016 12:36

AW: FileExists/FileDate - Auslesen über Netzwerk langsam
 
Zitat:

Zitat von dGeek (Beitrag 1347389)
Zitat:

speichern die Daten alle und vergleichen danach.
Du meinst, dein Programm kopiert die Quelldaten zum Zielverzeichnis und DANACH wird erst geguckt, was im Zielverzeichnis gebraucht wird?

Ich denke, jaenicke scannt Quell und Zielverzeichnis in einem Ruck durch und prüft dann, welche Unterschiede es gibt. Danach wird dann kopiert oder eben nicht.


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:28 Uhr.
Seite 2 von 4     12 34      

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz