Dateien von CD/DVD in Häppchen lesen. Wie große Häppchen?
-
Hi Leute,
ich lese eine Datei von einer CD aus, gleichzeitig lese ich eine Datei von der Festplatte aus.
Sinn: Die beiden Dateien vergleichen, ob sie identisch sind.
Ich weiß jetzt aber nicht so Recht, was die beste Größe der Häppchen ist, wenn ich zu wenig auslese (wenige Byte), dann dauert es ewig, weil die Zeit, die durch das weniger lesen gewonnen wird, viel geringer ist, als die Zeit, die das "lesen starten" usw benötigt. Momentan arbeite ich mit 1 MB-Häppchen. Tut eigentlich ganz gut. Aber vielleicht gibt es eine optimalere Größe?
-
Hi,
ist es nicht aufgabe des OS´, die Daten im voraus zu cachen?
Also z.B. gibt es ja bei der WinAPI diese Hint-Flags bei CreateFile, wie
FILE_FLAG_SEQUENTIAL_SCAN.
-
Hm, keine Ahnung
Verwende die MFC, die kennt solch ein Flag nicht. Die Frage ist jetzt nur: Macht sie es immer? Oder nie?
-
Du solltest dir IMHO trotz allem eine gute Blockgröße ermitteln. Ich tippe mal drauf, dass etwas so zwischen 512kB und 2MB ganz gut geeignet wäre, aber halbwegs verlässliche Größen kann man bestimmt ganz gut durch Messungen rausfinden.
-
Na, messen muss nciht sein
Ein Vielfaches der Blockgröße muss sein, das ist klar. Aber das ist bei einem MB ja gegeben (Blockgröße bei DatenCDs/DVDs = 2 KB).
Inzwischen habe ich es mal bei 3 MB.
-
Bedenke auch, dass es dem DVD-Laufwerk besser tut, wenn du viel auf einmal einliest, dieses staendige an/aus des Lasers schadet dem Laufwerk.... evtl. koenntest du den Parameter ja vom Benutzer waehlen lassen. Bei heutiger RAM-Ausstattung kannst du IMO auch 16 MB oder mehr auf einmal lesen
-
Mhm, auch wieder wahr.
Weiss denn niemand, was gängige Programme (Brennprogramme o.ä.) für Größen verwenden?
-
dEUs schrieb:
Mhm, auch wieder wahr.
Weiss denn niemand, was gängige Programme (Brennprogramme o.ä.) für Größen verwenden?Ich würd' einfach mal auf CMatt warten... lässt sich mal wieder nicht blicken!!
(*auf'sobligatorische"Schnauze!"wart*)
-
Halt's Maul! :p
-
dEUs schrieb:
Halt's Maul! :p
Von CMatt, nicht von Dir...
-
jaja... bin ja da... :p
Die max. größe die mit einem commando gelsen werden kann sind 32 sectoren.
Wenn du also am gesammten caching vorbei arbeite willst fange an nem ECC block (vielfaches von 16) an zu lesen und hohl dei dann laufend 32 sector blocks.
Das ganze solltest du dann aber direkt über nen ASPI layer oder DeviceIoControl machen, da du sonst nicht sicher sein kannst ob win nicht doch irgnedwo was cacht.
Wenn du es über die WinAPI machen willst mach ein CreateFile mit FILE_FLAG_SEQUENTIAL_SCAN (wie schon gesagt) und dann ist block größe relativ egal, sollte nur bei jedem lesevorgan gleich groß bleiben.
-
ok, dank dir