Einzelnen Beitrag anzeigen

dGeek
(Gast)

n/a Beiträge
 
#24

AW: FileExists/FileDate - Auslesen über Netzwerk langsam

  Alt 11. Sep 2016, 17:06
Guck mal mein Beispiel. Nicht das Sammeln der Daten ist das Problem

Kleines Beispiel. Es wurde alles weggelassen bis auf das, wo es hapert.
Das hier braucht rund 23 Sekunden (D:\ = im PC, Y:\ = Festplatte am Router per USB 100 MBit): (keine der Dateien existiert)
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;

 FileTimeToLocalFileTime(FileTime, ModifiedTime);
 FileTimeToSystemTime(ModifiedTime, SystemTime);
 Result := SystemTimeToDateTime(SystemTime);
end;

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

function IsFileANewerFileB(aFileA, aFileB: string): Boolean;
var
 bRes: Boolean;
begin
 if (not FileExists(aFileB)) or (not FileExists(aFileA)) then
  bRes := True
 else
  bRes := getFileLastModified(aFileA) > getFileLastModified(aFileB);

 Result := bRes;
end;

/////////////////////////////////////////////////////////////////////////////////
procedure TForm1.Button1Click(Sender: TObject);
var
 freq: Int64;
 startTime: Int64;
 endTime: Int64;
 i: Integer;
 a, b: String;
begin
 QueryPerformanceFrequency(freq);
 QueryPerformanceCounter(startTime);

 a := 'D:\Datei1.txt';
 b := 'Y:\Datei2.txt';

 for i := 0 to 9999 do
  begin
   if IsFileANewerFileB(a, b) then
    begin
    end;
  end;

 QueryPerformanceCounter(endTime);

 ShowMessage('Die Routine benötigte etwa ' + IntToStr((endTime - startTime) * 1000 div freq) + 'ms');
end;
/////////////////////////////////////////////////////////////////////////////////
Wenn Y:\ durch D:\ ausgetauscht wird, dauert das Ganze 50ms.
  Mit Zitat antworten Zitat