AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Streams vergleichen?

Ein Thema von Kedariodakon · begonnen am 8. Nov 2004 · letzter Beitrag vom 9. Nov 2004
Antwort Antwort
Seite 2 von 2     12   
Benutzerbild von Sharky
Sharky

Registriert seit: 29. Mai 2002
Ort: Frankfurt
8.252 Beiträge
 
Delphi 2006 Professional
 
#11

Re: Streams vergleichen?

  Alt 9. Nov 2004, 08:44
Zitat von shmia:
Einen Hashwert für jeden Stream zu ermitteln macht wenig Sinn, da zum Ermitteln des Hashwertes sowieso
der gesamte Stream gelesen werden muss!!!
Hai shmia,

dein Argument greift aber nur wenn es sich dabei um Dateien handelt. Kedariodakon hat ja nur danach gefragt zwei Streams zu vergleichen. Ergo müssen die beiden ja schon im Speicher sein
Stephan B.
"Lasst den Gänsen ihre Füßchen"
  Mit Zitat antworten Zitat
Benutzerbild von Kedariodakon
Kedariodakon

Registriert seit: 10. Sep 2004
Ort: Mönchengladbach
833 Beiträge
 
Delphi 7 Enterprise
 
#12

Re: Streams vergleichen?

  Alt 9. Nov 2004, 09:22
Es handelte sich um Datein, welche auch hätten etwas größer sein können
Konnte sie aber nun schön vergleichen...

Bye
Christian
  Mit Zitat antworten Zitat
Benutzerbild von negaH
negaH

Registriert seit: 25. Jun 2003
Ort: Thüringen
2.950 Beiträge
 
#13

Re: Streams vergleichen?

  Alt 9. Nov 2004, 14:41
Ich vermute mal das dein Vergleich nicht bei ZWEI Streams/Dateien bleibt, d.h. das du später zB. 10 Dateien untereinander auf Gleichheit überprüfen willst.
Dann nehme eine Hash-Funktion wie du sie im DEC hast. Erzeuge zu jeder Datei einen Hash und füge diesen in eine sortierte Liste ein. Bei 10 Dateien muss damit auch jede Datei nur einmal readonly eingelesen werden um deren Hash zu erzeugen. Dies ist mit zb. einem MD4 Hash ca. 250Mb/sec schnell. Bei einem Direktvergleich der Dateiinhalte würde man im schlechtesten Falle 10*9 komplette Dateivergleiche benötigen. Also viel mehr an Speicher/Dateioperation. Eine Hashfunkton hat im Gegensatz zu einer einfachen 32Bit CRC auch mit ca. 128Bit Prüfsumme eine weit weit geringere Gefahr von Kollisionen. D.h. wenn man eine CRC benutzt so ist die Wahrscheinlichkeit das zwei unterschiedliche Dateien denoch die gleiche CRC besitzen viel viel größer als bei einer Hashfunktion. Das Verhältnis dabei ist 1 zu 2^96.

Wichtig ist auch noch ein spezielles Verhalten ALLER Dateisysteme. Das Positionieren mit dem Dateizeiger -> Stream.Position und AUCH die Abfrage des Dateizeigers mit if Stream.Position ... then, ist um einiges langsammer als das lineare und sequentielle Lesen einer Datei. Es ist also sehr wichtig beim Einlesen der Daten aus einer Datei die Größe der Datei und die aktuelle Positon in die Datei in lokalen Variablen zu halten, statt sie mit Stream.Size oder Stream.Positon permanent live abzufragen. Der Performance-Unterschied kann 200-300% ausmachen !!


Gruß Hagen
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:46 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