Allgemeine Fragen zur PROFAN Programmierung
Views (Heute): 249303 (10739)
  Suchen
 Zurück zur Übersicht
 AutorThema: Festplattenzugriff oder Arbeit im Speicher?
Stefan Schnell
Datum:15.12.01 10:20 Antwortenals Email verschicken (mail@stschnell.de) 


Hallo Community,
bin gerade mit folgendem Problem beschäftigt:
Habe diverse Datenbanken im ASCII-Format, die ich jede Nacht in einem automatischen Lauf so konvertiere, dass via ODBC darauf zugegriffen werden kann. Insbesondere sind fehlende Satzendezeichen ein Problem.
Bisher habe ich jeden Datensatz via BLOCKREAD ausgelesen und mittels BLOCKWRITE wieder geschrieben, ungefähr so:

WhileNot Eof()
@BlockRead(#1, B#, 0, 324)
String B#, 324 = @Chr$(13) + @Chr$(10)
BlockWrite #2, B#, 0, 326
EndWhile

(Hier ist der Datensatz 324 Bytes lang und wird um $13$10 (CrLf) ergänzt.

Jetzt bin ich auf die Idee gekommen, die massiven Festplattenzugriffe, die damit ja stattfinden, zu reduzieren und so eine Performancesteigerung durchzuführen. Dies habe ich mit folgendem Algorithmus versucht:

While AnzBytes% = 32400
Clear B#
AnzBytes% = @BlockRead(#1, B#, 0, 32400)
Clear Pos%, i%, j%
While Pos% <= AnzBytes% + i%
Pos% = Pos% + 324 + j%
BerStr$ = @String$(B#, Pos%)
BerStr$ = @Chr$(13) + @Chr$(10) + BerStr$
String B#, Pos% = BerStr$
i% = i% + 2
j% = 2
EndWhile
BlockWrite #2, B#, 0, AnzBytes% + i% - 2
EndWhile

(Hier werden 100 Datensätze à 324 Bytes eingelesen und CrLf wird entsprechend im Speicher zugefügt und dann werden alle geänderten 100 Datensätze auf einmal wieder zurückgeschrieben.)

Leider hat diese Vorgehensweise nicht den gewünschten Effekt. Sind die Routinen (hier Stringaddition, die STRING-Funktion, mathematische Addition und Variablenzuweisung), die verwendet werden, tatsächlich so langsam, wie ein Festplattenzugriff?

Da sich meine Routine insgesamt noch in der Entwicklung befindet ist sie sicher nicht optimal. Wie kann ich mein Problem besser und schneller lösen?

Bin für jeden Ansatz dankbar.

Tschüss
Stefan Schnell


Bernd Haase
Datum:18.12.01 06:52 Antwortenals Email verschicken (info@ebs-haase.de) 


Verstehe ich das richtig, das Du DBs mit BLOCKREAD ausliest und wieder schreibst ?



Stefan Schnell
Datum: 19.12.01 09:17 Antwortenals Email verschicken (mail@stschnell.de) 


Hallo Bernd,
völlig richtig erkannt. Es handelt sich hier um ASCII-DB, eines etwa 10 Jahre alten ERP-Systems.
Tschüss
Stefan



 Zurück zur Übersicht