-
Forum: Sonstige Fragen zu Delphi
Delphi
by dahead,
5. Aug 2005
hätte jetzt eher auf die usa getippt.
stört mich nicht.
-
Forum: Sonstige Fragen zu Delphi
Delphi
by dahead,
4. Aug 2005
hehe. ja, so gehts, wenn man sich nichtmal genau ansieht, was man verwendet/kopiert.
daher habe ich auch oben erwähnt, dass ich ungern den kompletten source von jemand anderem einfach übernehme.
-
Forum: Sonstige Fragen zu Delphi
Delphi
by dahead,
4. Aug 2005
@negaH:
ich meinte das nicht negativ, im gegenteil. wie gesagt, mit deinem wissen, was alleine das mmf thema anbelangt, konnte ich mir eben nicht vorstellen, dass du "nichts besseres" zu tun hast. ich bin sehr froh darüber, dass du dir dabei so viel mühe gemacht hast.
ich glaube niemand wollte dir unterstellen, dass deine offenen sourcen abfallprodukte sind, ganz im gegenteil. ich schätze...
-
Forum: Sonstige Fragen zu Delphi
Delphi
by dahead,
4. Aug 2005
naja, folgendes beispiel:
du willst 1000 dateien mit der mmf methode auf gleichheit prüfen. das dauert relativ lange. wenn du aber vorher bereits via md4/md5 oder sonstwas eine checksumme erstellst (was schnell geht), brauchst du nachher nur noch die dateien mit gleichen checksummen via mmf inhaltlich prüfen.
hoffe du konntest mir folgen.
edit: vielleicht sagt dir folgender code mehr als...
-
Forum: Sonstige Fragen zu Delphi
Delphi
by dahead,
4. Aug 2005
@himitsu:
hehe
ich meinte damit egtl. eher warum er meint, dass er nichts besseres zu tun hat. das kann ich mir egtl. nicht vorstellen.
und klar, wenn jemand viel zeit in einen code investiert, gibt er/sie ihn klar nicht einfach so raus. ist verständlich.
@FriFra:
-
Forum: Sonstige Fragen zu Delphi
Delphi
by dahead,
4. Aug 2005
ja, ich weiß. ich könnte sicherlich mit md4 noch was rausholen, verwende md5 halt wg. der entdeckten kollision (gibts ja mtwl. bei md5 auch -> ergo ist meine begründung relativ sinnfrei, da gebe ich dir recht).
aus diesem grund bin ich auch auf himitsu's lösung gespannt.
davon haben sicherlich noch viele andere etwas. beachte einfach mal den download-counter von zeit zu zeit. ich wette...
-
Forum: Sonstige Fragen zu Delphi
Delphi
by dahead,
4. Aug 2005
@negaH:
hättest du nicht unbedingt machen müssen, ich verwende lieber md5. vorallem weil ich keinen signifikanten geschwindigkeitsvorteil in einem kurzen test mit deiner FileCompare.pas festgestellt habe.
von nutzen ist deine unit aber auf alle fälle, nicht dass du mich falsch verstehst... ich verwende eben nur ungern den kompletten code von jemand anderem.
wie gesagt, nochmals danke...
-
Forum: Sonstige Fragen zu Delphi
Delphi
by dahead,
4. Aug 2005
@negaH:
ich habe die korrigierte fassung der comparefile prozedur (also mmf) über das selbe verzeichnis laufen lassen.
ich dachte zwar schon, das programm hätte sich aufgehängt, aber nach 1391 sekunden war er dann doch noch erfolgreich fertig.
jaja, die 0,2 sek. wären auch zu schön um wahr zu sein. trotzdem vielen dank für die mühe u. arbeit die du dir hier gemacht hast.
deine arbeit,...
-
Forum: Sonstige Fragen zu Delphi
Delphi
by dahead,
4. Aug 2005
@frifra, @negaH:
genau den selben fehler erhalte ich ja auch. ich hab mich schon gewundert warum du einen anderen bekommst.
ich habe gestern noch einiges zu dem thema gelesen, und es muss wohl wirklich an CurPosHi u. CurPosLo liegen. Irgendwie werden die falsch geteilt, bzw. der rest ist nicht mit "dwAllocationGranularity" kompatibel.
ich weiß aber momentan auch nicht wirklich warum.
-
Forum: Sonstige Fragen zu Delphi
Delphi
by dahead,
4. Aug 2005
@supermuckl: bezüglich der performance (i/o u. mmf) habe ich einen relativ interessanten artikel gefunden:
http://blogs.borland.com/dcc/archive/2004/03/19/2380.aspx
-
Forum: Sonstige Fragen zu Delphi
Delphi
by dahead,
3. Aug 2005
den fehler hab ich zwar noch nicht korrigiert, aber vorhin deine methode getestet.
bei gleichem verzeichnis wie oben hat es 715 sek. gedauert.
-
Forum: Sonstige Fragen zu Delphi
Delphi
by dahead,
3. Aug 2005
@negaH:
ja, siehe obigen post.
edit1:
jetzt weiß ich auch die stelle:
-
Forum: Sonstige Fragen zu Delphi
Delphi
by dahead,
3. Aug 2005
wie gesagt, es können noch fehler enthalten sein.
ich habe mal das boolean statement durch integer ersetzt und bekomme zwar auch je nach datei mal eine -1 zurück, aber soweit ich das sehe nur deshalb, weil die dateien ungleich sind. doppelte (gleiche/identische) dateien werden richtig bestimmt.
ich gebe dir recht, die benötigte zeit ist absolut erstaunlich, aber selbst mit breakpoints...
-
Forum: Sonstige Fragen zu Delphi
Delphi
by dahead,
3. Aug 2005
ok, hier ist der vergleich. ich weise aber darauf hin, dass die prozedur CompareFilesFileStream die daten von vorne nach hinten liest, während CompareFilesMemoryMapped von hinten nach vorne (s. negaH's post). das heisst die prozedur CompareFilesFileStream müsste dahingehend optimiert werden um einen einigermaßen adequaten vergleich zu erzielen.
zum vergleich:
daten die überprüft wurden: 22...
-
Forum: Sonstige Fragen zu Delphi
Delphi
by dahead,
3. Aug 2005
@supermuckl:
mit was willst du vergleichen? mit TFileStream?
-
Forum: Sonstige Fragen zu Delphi
Delphi
by dahead,
3. Aug 2005
ah, danke für diesen hinweis!
ja, ist ohne die extra klasse sogar kompakter/übersichtlicher und da ich sowieso in keiner anderen prozedur darauf zugreifen muss, habe ich es wie in deinem beispiel-code gelöst.
ich bin zwar noch am testen (speicherlücken usw.) aber wenn die abgeschlossen sind, poste ich hier den fertigen code. vielleicht kann ja noch jemand was damit anfangen, bzw....
-
Forum: Sonstige Fragen zu Delphi
Delphi
by dahead,
3. Aug 2005
wow!
das muss ich aber erstmal verdauen, sprich für meinen bestehenden code anpassen. eventuell mach ich den vergleich dann wirklich in nur dieser einen prozedur (sprich create u. vergleich in einer prozedur).
achja, was mir gerade noch einfällt: bevor du vorhin deinen code bearbeitet hattest, hab ich versucht zu testen. allerdings meckert bei mir der compiler bei 2^32. da sagt er mir...
-
Forum: Sonstige Fragen zu Delphi
Delphi
by dahead,
3. Aug 2005
hallo negaH,
erstmal danke für deine ausführliche hilfe.
ich werde versuchen deinen vorschlag umsetzen. ich melde mich wieder, wenn es geklappt hat und poste dann die fertige (hoffentlich) prozedur.
nochmals vielen dank für deine hilfe!
-
Forum: Sonstige Fragen zu Delphi
Delphi
by dahead,
3. Aug 2005
ich glaube ich habe den fehler gefunden:
MapViewOfFile(MMF1.fFileMap, FILE_MAP_READ, CurPos, CurPos + AllocGran, AllocGran);
MapViewOfFile(MMF2.fFileMap, FILE_MAP_READ, CurPos, CurPos + AllocGran, AllocGran);
if not CompareMem(@MMF1.fFileMap, @MMF2.fFileMap, AllocGran) then
Exit;
so gehts. ist das korrekt? bzw. ist es auch korrekt das MapViewOfFile im Create wegzulassen. ich denke...
-
Forum: Sonstige Fragen zu Delphi
Delphi
by dahead,
3. Aug 2005
Ja, das stimmt. bei meinem system ist der durch GetSystemAllocationGranularity ermittelte buffer sogar genau 64 kb groß.
das TMemoryMappedFile erstelle ich durch eine leicht von deiner version abgewandelte prozedur (ich habe mir z.b. die property fSize eingebaut):
constructor TMemoryMappedFile.Create(const FileName: String);
var
P: Pointer;
begin
fFileHandle := FileOpen(FileName,...
-
Forum: Sonstige Fragen zu Delphi
Delphi
by dahead,
3. Aug 2005
hallo,
ja, das mit .Read ist mir jetzt klar (s. oben).
1.) GetFileSize speichere ich bereits als Int64.
2.) ok, werde ich einbauen.
3.) ok
4.) ja, so habe ich mir das auch gedacht. ich muss jetzt nur aus diesen beiden prozeduren (FilesAreBinaryEqual u. TMemoryMappedFile.Create) eine basteln, die das besagte problem löst.
das mit den 64 kb blöcken ist ebenfalls logisch, wie du siehst...
-
Forum: Sonstige Fragen zu Delphi
Delphi
by dahead,
3. Aug 2005
@sharky:
ja, du hast recht. ist mir gerade auch klar geworden als ich da zwei breakpoints auf die entsprechenden read stellen gesetzt habe.
-
Forum: Sonstige Fragen zu Delphi
Delphi
by dahead,
3. Aug 2005
kann gut sein, dass der test nicht aussagekräftig ist. siehe meinen vorherigen post.
-
Forum: Sonstige Fragen zu Delphi
Delphi
by dahead,
3. Aug 2005
@negaH:
ja, danke für den hinweis mit dem umständlichen code. ich war auch gerade dabei diesen zu optimieren, wollte mir allerdings vorher
die entsprechenden msdn artikel zur gemüte führen.
P := MapViewOfFile(FMapping, FILE_MAP_READ, 0, 0, 0);
wieviel wird hier eigentlich in den speicher gelesen? laut meiner hilfe ist der letzte parameter dwNumberOfBytesToMap ja auf 0.
um das 2gb...
-
Forum: Sonstige Fragen zu Delphi
Delphi
by dahead,
3. Aug 2005
also ich habe während ich vorhin den o.g. beitrag von negaH gelesen habe, einen test mit TFileStream laufen lassen.
dabei wurden wieder die beiden doppelten dateien verglichen (s. screenshot irgendwo vorne). dauer ca. 700 sekunden.
edit: also byte-per-byte.
gerade habe ich negaH's code eingebaut und der vergleich dauert 3,44 sekunden.
erstaunlich. ich muss mir mal die hilfe zu den api...