Autor Beitrag
thebe
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 128

WinXP Home
D6 Enterprise
BeitragVerfasst: Mi 12.03.03 15:54 
Moin

wie das Topic scho sagt versuche ich in Streams neue Daten einzufügen nur die Methode die ich immo benutze is bei der Größe der Daten einfach zu langsam.

Ich mach das immo so, daß ich die benötigten Daten von Stream 1 bis zur Position wo ich einfüge innen MemStream einlese, dann die einzufügenden Daten von Stream 2 dahinter schreibe und dann den Rest von Stream 1 dahinter schreibe. Schön und gut, bei kleinen Datein funkt das recht gut, nur bei größeren ( ~ 170 MB) dauert das ne kleine Ewigkeit und geht desweiteren auch noch auffem Arbeitsspeicher.

Gibt es eine andere Möglichkeit in File bzw. Mem Streams Daten einzufügen ohne gleich die ganze Datei neuzuschreiben ?

Vielen Dank für Hilfe / URLs / Denkansätze scho ma im Vorraus :)

-Thebe
Udontknow
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2596

Win7
D2006 WIN32, .NET (C#)
BeitragVerfasst: Mi 12.03.03 17:11 
Hallo!

Nicht, dass ich wüsste, ich mache es genauso wie du. Aber bei solchen Datenmengen ist die Verwendung von FileStreams anstelle von Memory-Streams da obligatorisch.

Cu, :)
Udontknow
Andreas Pfau
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 997



BeitragVerfasst: Do 13.03.03 22:18 
@Udontknow hat Recht. FileStreams sind schneller, da man nicht erst alles in den RAM laden muss. Aber zu deiner Enttäuschung: Dateien werden (wnn nicht fragmentiert) sequentiell auf die Platte geschreiben. Das bedeutet, es gibt keine Möglihchkeit, da einfach was "reinzuflicken". Wenn du 'nen FileStream nimmst, musst du nur dern zu verschiebenden Teil in den RAM kopieren, beim MemoryStream nochmal alles zusätzlich.

Bitte korrigiert mich, fals das falsch ist, aber ich bin mir doch recht sicher.

Also, ich habe vorher erwähnt, dateien können fragmentiert werden. Wenn du Zugriff auf das Dateisystem (z.B. FAT, NTFS) hättest, könntest du evtl. Fragmente reinhauen. Aber das ist Utopie, weil:
- das sicher furchtbar kompliziert ist
- du für jedes Dateisystem (FAT16, FAT32, NTFS) eine eigene Routine bräuchstest

_________________
Life is a bad adventure, but the graphic is really good!
mimi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3458

Ubuntu, Win XP
Lazarus
BeitragVerfasst: Fr 14.03.03 20:39 
die könnte man ja schreiben wenn man weiß wie das geht.
Aber dafür muss man schon die Festplate genau kennen, um sowas zu machen z.b. im Sektor 0 sind die boot sachen......

_________________
MFG
Michael Springwald, "kann kein englisch...."
Andreas Pfau
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 997



BeitragVerfasst: Fr 14.03.03 21:13 
Tja, ich habe das Wort "Utopie" mit Bedacht gewählt.

Aber, @thebe, um was geht's denn überhaupt? hast du das Dateiformat selbst erstellt? Wenn ja, villeicht lässt sich ja was machen, damit du die Änderungen em ende de Datei anhängen kannst, oder Platzhalter einfügen, etc.

_________________
Life is a bad adventure, but the graphic is really good!
mimi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3458

Ubuntu, Win XP
Lazarus
BeitragVerfasst: Fr 14.03.03 22:56 
es gibt ja programm die können in senkunden schnelle deine festplate durchsuchen z.b. diese Norten antivirus, wie machen die das ?

_________________
MFG
Michael Springwald, "kann kein englisch...."
tommie-lie
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 4373

Ubuntu 7.10 "Gutsy Gibbon"

BeitragVerfasst: Sa 15.03.03 13:15 
@mimi: es geht ja nicht um das Durchsuchen von Dateien, sondern um's Neuschreiben. Lesen ist immer schneller.

Die Idee mit dem fragmentieren von Andres ist gar nich so schlecht. In der FAT stehen sowieso alle Cluster einzelnd und zu welcher Datei die gehören. Du müsstest jetzt "nur" die FAT manipulieren und dafür sorgen, daß du per direkten Zugriff über's BIOS (Int13) deine Daten irgendwo hinschreibst, wo Platz ist, und dann der FAT verklickern, daß die und die Datei jetzt zusätzlich noch ein paar Cluster an der und der Stelle hat. Soweit zur Theorie (ist so machbar). In der Praxis dürfte es schwieriger sein, vor allem unter Windows und erst recht unter NT. Unter DOS habe ich schon Programme gesehen, die die FAT direkt verändern. Unter windows scheint das auch zu klappen, denn defrag macht ja nix anderes. Aber da du über's BIOS auf die Platte schreiben musst (die Daten dürfen ja nicht als Dateien gespeichert werden, sonst ändert Windows/das OS schon die FAT), hat das ganze schon ein wenig den Charakter eines Festplattentreibers, und ob das Windows einfach so zulässt, vor allem wenn's nicht in C geschrieben ist, ist ein ganz anderes Problem.

Mein Tipp daher für Festplattenstreams die unbedingt das haben müssen, was du sagtest:
Stream1 öffnen.
Zu der Stelle suchen, an der eingefügt werden soll.
Bis zum Ende alles einlesen und in einen temporären Stream (auf der Festplatte! im RAM könnten große Dateien Probleme verursachen) speichern.
Stream2 öffnen.
In Stream1 wieder zur Stelle suchen.
Stream2 in Stream1 kopieren.
Vom temporären Stream wieder in Stream1 zurück.

So sparst du die auf jeden Fall das Lesen und schreiben des ersten Teiles. Wichtig ist, daß du beim Lesen und Schreiben nicht den gesamten Teil liest und schreibst, da dieser ja dann im RAM landet. Also in einer Schleife immer nur wenig Lesen (am Besten 8kb (mit 1024 als Basis), weil dann meistens 1 oder 2 Cluster gelesen werden (kleinste Größe: 4kb). Somit ersparst du der Festplatte das merhfache Lesen ein und desselben Clusters. Aber dank Festplattencache macht das nicht mehr soooo viel aus. Aber schner sind die Größen trotzdem, es soll ja auch noch alte Platten ohne internen Cache geben...

_________________
Your computer is designed to become slower and more unreliable over time, so you have to upgrade. But if you'd like some false hope, I can tell you how to defragment your disk. - Dilbert