Re: Filedup - Identische Dateien finden
Also dat versteh ich nicht ganz, :gruebel:
wieso übergibst du die Zeit SetStateTime(Project.CurrentTime);, wenn du sie eh nicht verwendest?
Delphi-Quellcode:
so wird's wohl gemeint sein.
procedure TStatusForm.SetStateTime(const Seconds: Cardinal);
begin TimeLabelContent.Caption := SecondsToHours(Project.CurrentTime); end;
Delphi-Quellcode:
Dann ist diese voll mißt, denn es zählt total falsch.
procedure TStatusForm.SetStateTime(const Seconds: Cardinal);
begin TimeLabelContent.Caption := SecondsToHours(Seconds); end; Nach dem oben schon erwähntem Szenario benötigt mein Programm 2,2 Stunden und deines hab ich nach über 2 stunden bei 11% abgebrochen, jedoch hatte es seiner Meinung nach bis dahin nur 1,5 Stunden gebraucht. Im Extem gingen schonal in nur 30 Sekunden über 10 Sekunden auf deiner Uhr verloren. :shock: Da OnTime durchschnittlich nicht alle genau einer Sekunde aufgerufen wird (ist bei deinem Programmaufbau garnicht möglich) muß falsch gezählt werden, da zwar nach spätestens 1 Sekunde durch den Timer der Aufruf von TStatusForm.OnTime veranlaßt wird, aber durch die eher sperrliche Abarbeitung der Nachrichtenliste deiner Anwendung Einiges untergeht und verzerrt wird. Es wird ja nur wärend Application.ProcessMessages die Nachrichtenliste abgearbeitet > siehe TimeDemo (Anhang) Da läuft ein Timer mit 100ms-Intervall. Als Versuchswerte bieten sich 0, 50, 100 und 500 an: - 0 und 50: zu vermuten wäre, daß wegen des geringeren Intervalls die Zeit fast genau wäre, dennoch fehlt Einiges. - 100: hier könnte man auch 'ne Übereinstimmung vermuten, da beide Intervalls gleich sind. - über 100 (Timer1.Intervall = 100) muß was fehlen, da hier das Intervall zu groß ist und dadurch auf Jedenfall die Nachrichtenverarbeitung verschleppt wird. Besser du speicherst die Startzeit und rechnest die tatsächlich vergangene Zeit aus. (GetTickCount + Integer-Cardinal-Konvertierung sollte hoffentlich mit den bis zu 24,86 Tagen ausreichen)
Delphi-Quellcode:
Vergiß aber nicht die vergangene Zeit nach Scanende zu speichern (für deine Statistik).
procedure TStatusForm.OnTime(Sender: TObject);
begin SetStateTime(GetTickCount - Project.CurrentTime); end; procedure TStatusForm.InitStateTime; begin Project.CurrentTime := GetTickCount; SetStateTime(GetTickCount - Project.CurrentTime); end; Wenn ich die Laufzeit bei mir so sehe, dann wäre es nett, wenn man zwischen Cached- und NonCached-Dateioperationen auswählen könnte. Vorallem ist es Schlimm, wenn nachdem (und natürlich auch wärend) dein Programm lief, alles was auf die Festplatte zugreift teilweise minutenlang braucht ... vorallem ganz nett im Explorer anzusehen ... is hier aber auch kein Wunder, denn schließlich braucht es 'ne kleine Weile, bis so 700-800 MB aus der Systemcache abgebaut und aufgeräumt wurden ... zum Glück paßt da bei mir zur Zeit nicht nochmehr rein ^^ Zitat:
aber keine Sorge ... ich seh in deinem Quellcode och nicht so ganz durch ... anderer Codestil und total andere (mir unverständliche) Herangehensweise... :angel: PS: 458.714 - 170 GB 164.051 - 9,45 GB PSS: http://www.delphipraxis.net/internal...=663073#663073 Und dat Schaf: ich liebe es ... is ja auch mein Sternzeichen (jap) :zwinker: http://fnse.de/S05/1O6.gif http://fnse.de/S05/1O7.gif http://fnse.de/S05/1OA.gif http://fnse.de/S05/1OB.gif http://fnse.de/S05/1O8.gif http://fnse.de/S05/1OD.gif http://fnse.de/S05/1O9.gif http://fnse.de/S05/1OC.gif Bin zwar nicht der Copyrightinhaber davon, allerding sollte es keine rechtlichen Probleme geben. werd' aber bei Gelegenheit bei Natasja nochmal anfragen. |
Re: Filedup - Identische Dateien finden
Zitat:
Du müsstest also sehr viel raushauen, um da wirklich die Pause zu sparen :D |
Re: Filedup - Identische Dateien finden
Naja, solchen Käse verzapft doch jeder mal... :wink:
Delphi-Quellcode:
:shock:
Function SizeToString(Size: LargeInt): String;
Var i: LargeInt; Begin i := Abs(Size); If i < 1000 Then Result := Format('%.0n B', [Size / 1]) Else If i < 10235 Then Result := Format('%.2n KB', [Size / 1024]) Else If i < 102349 Then Result := Format('%.1n KB', [Size / 1024]) Else If i < 1023488 Then Result := Format('%.0n KB', [Size / 1024]) Else If i < 10480518 Then Result := Format('%.2n MB', [Size / 1048576]) Else If i < 104805172 Then Result := Format('%.1n MB', [Size / 1048576]) Else If i < 1048051712 Then Result := Format('%.0n MB', [Size / 1048576]) Else If i < 10732049531 Then Result := Format('%.2n GB', [Size / 1073741824]) Else If i < 107320495309 Then Result := Format('%.1n GB', [Size / 1073741824]) Else If i < 1073204953088 Then Result := Format('%.0n GB', [Size / 1073741824]) Else If i < 10989618719622 Then Result := Format('%.2n TB', [Size / 1099511627776]) Else If i < 109896187196212 Then Result := Format('%.1n TB', [Size / 1099511627776]) Else If i < 1098961871962112 Then Result := Format('%.0n TB', [Size / 1099511627776]) Else If i < 11253369568892027 Then Result := Format('%.2n PB', [Size / 1125899906842624]) Else If i < 112533695688920269 Then Result := Format('%.1n PB', [Size / 1125899906842624]) Else If i < 1125336956889202688 Then Result := Format('%.0n PB', [Size / 1125899906842624]) Else Result := Format('%.2n EB', [Size / 1152921504606846976]); End; Recht haste aber trotzdem mit dem Counter. War im übrigen bekannt, man muss nur ein paar mal hintereinander 'Pause ' drücken, während "er" rödelt. Das ich allerdings die globale Variable dafür benutze, war nicht geplant. Haste ja rischtisch gesacht und werdsch mal ändern. :wink: Zitat:
Aber vielleicht kann ich dir ja och noch uff de Sprünge helfen und dir einiges erklären. :stupid: PS: Wäre schön, wenn der Copyright-Inhaber nichts dagegen hätte. @XZise: Da geht in jedem Fall noch was. :angel2: Mein Zufallsgenerator muss nur irgendwann den richtigen Code ausk*****. |
Re: Filedup - Identische Dateien finden
Liste der Anhänge anzeigen (Anzahl: 1)
upps, vergessen die Datei mit hochzuladen :wall:
Zitat:
Wert immer maximal 3-stellig und dann sind die Werte speziell auf das standardmäßige Rundungsverhalten der FPU abgestimmt. Und ja, es ist mit Absicht mit IF und nicht über CASE gelöst :angel: PS: Sheepo ... sie hatte so jedenfalls (soweit ich es noch weiß) nie verboten gahabt, :angel: 's is aber bestimmt auch schon über 1,5 Jahre her, dat ich die Kleinen fand. |
Re: Filedup - Identische Dateien finden
moin moin,
Warum if und case verwenden, wenn es auch iterativ zu lösen ginge? Nur der Rundung halber? :gruebel:
Delphi-Quellcode:
PS: TimeTest hab ich mir angesehen, werd ich wie gesagt nochmal fixen.
function FileSizeToString(const FileSize: Int64): String;
const Measure: Array[0..4] of String = ('Byte', 'KB', 'MB', 'GB', 'TB'); var NewSize: Currency; var i: Integer; begin Result := ''; if FileSize > -1 then begin i := 0; NewSize := FileSize; while (NewSize >= 1024) do begin NewSize := NewSize / 1024; Inc(i); end; case i of 0: Result := FloatToStr( NewSize ); 1, 2, 3: Result := FormatFloat('0.00', NewSize); 4: Result := FormatFloat('0.000', NewSize); else Result := FloatToStr( NewSize ); end; Result := Result + #32 + Measure[i]; end; end; Und @alle die ihre Farben ändern, aber sich wundern, warum im Report andere Farben auftauchen, is so, nich wundern ;>. |
Re: Filedup - Identische Dateien finden
meines bekommt keine Rundungsfehler ('s wird ja nirgends was umgerechnet), ist schneller und warum erst in 'ner Schleife mit langsamen Fließkommazahlen rechnen, wenn doch einfache Integervergleiche ausreichen :zwinker:
und deines zeigt doch bestimmt 1010 Byte als 1010 Byte an ... meines als 0,99 KB ... wie gesagt, ich wollte genau 3 Stellig haben und nicht nur meistens, oder so in etwa... :roll: schau dir doch mal die Integer-Vergleichswerte an ... es hat 'nen Grund, dat die krum und bucklig sind (z.B. 10235 statt 10240) :mrgreen: |
Re: Filedup - Identische Dateien finden
[ot]
Schau dir doch mal an, was der Windows Explorer (Datei->Eigenschaften) bei 1010 Byte anzeigt. :stupid: Das der Datentyp Currency nur 4 Nachkommastellen aufnimmt, ist für diese Berechnung auch nicht weiter schlimm, schließlich zeige ich auch nur maximal 3 Stellen hinter dem Komma an. Wie och immer...so hat jeder seine eigene Logik... PS: Und ganz Explorer-Like arbeitet meine Funktion nicht...woltsch nur anmerken :warn: [/ot] |
Re: Filedup - Identische Dateien finden
moin moin,
eine neue Version ist oben und darf getestet werden. 1.0.5.0 - Optimierung der Suche - Dauer der Suche wurde falsch berechnet - Stop bricht nun sofort einen Suchvorgang ab - Breiten aller Spalten (Dateiliste) werden nun gesichert - Sortierung der Spalten 'Name', 'Verzeichnis' und 'Typ' arbeiteten nicht korrekt - eine Zusammenfassung eines Suchlaufs kann nun in die Zwischenablage kopiert werden |
Re: Filedup - Identische Dateien finden
Liste der Anhänge anzeigen (Anzahl: 1)
Zu euren Größenpräfixen:
Sie brauchen für eine Berechnung von 100.000 mal ungefähr 62 ms ;) Also ist es eigentlich egal, was ihr verwendet. (Dateigröße: 123456 Byte) Zusätzlich habe ich noch die "Thousands"-Methode entwickelt, welche zuerst ausrechnet, welche Tausenderpotenz es hat, und das dann als Potenz nimmt zur Berechnung. Dummerweise ist es nicht schneller :( Ganz im Gegenteil... ~ 125 ms für 100.000 Berechnungen. PS: Ich rechne mit "GetThreadTimes" |
Re: Filedup - Identische Dateien finden
moin moin,
@XZise: Beide Funktionen sind schnell genug, um die Aufgabe zu lösen. Sie werden hauptsächlich beim Zeichnen des Grids verwendet, im Endeffekt also keine 1000 aufgerufen pro Zeichnung. Somit dürfte der Zeitunterschied = 0 betragen. Darum ging es aber auch gar nicht, es ging um Programmier-Stil. Gruss bigg |
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:40 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz