Hallo.
Ich habe folgendes Problem.
Ich bekomme von einer Messkarte aufgezeichnete Daten in ein Feld (Ringfeld) übergeben.
Zusätzlich bekomme ich die Information wo die neuen Daten und wieviel neue Daten abgelegt sind.
Diese Daten werden dann folgendermaßen abgelegt:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9:
| for iZaehler:=int32DataPos to (int32DataPos + int64AvailData) - 1 do begin if (ThreadVari.int32BytesProSample = 1) then Stream.Write (pbyData[iZaehler], SizeOf(pbyData[iZaehler])) else Stream.Write (pnData[iZaehler], SizeOf(pnData[iZaehler])); end; end; |
Hierbei ist
int32DataPos -> Anfangsposition der Daten im Feld
int64AvailData -> Endposition der Daten im Feld
ThreadVari.int32BytesProSample -> Datenart (Datentyp)
pbyData oder pnData -> Daten
Das Problem hier ist, dass das Speichern zu langsam ist. Es werden bei einem Speicherzyklus ca. 2MB gespeichert. Es dauert viele Sekunden bis diese Speicherschleife alles abgelegt hat.
Ist es nicht möglich diesen Datenbereich in einem abzuspeichern?
Gruß
Rasmus
---
Moderiert von
Narses: Beiträge zusammengefasst---
Hallo.
Habe jetzt zwischenzeitlich ein paar tests gemacht.
Es scheint, dass mit der Übergabe "Write" ein Pointer übergeben wird. Ab dieser Position wird dann die Anzahl der Bytes geschrieben.
Somit kann ich mir die Schleife sparen und der Wirte-Methode die Anzahl der Bytes mitgeben, die ab dem angegebenen Feldindex geschrieben werden sollen:
Delphi-Quelltext
1: 2: 3: 4: 5:
| if (ThreadVari.int32BytesProSample = 1) then Stream.Write (pbyData[int32DataPos], SizeOf(pbyData[int32DataPos]) * int64AvailData) else Stream.Write (pnData[int32DataPos], SizeOf(pnData[int32DataPos]) * int64AvailData); |
Dann geht das Schreiben auch Ratz-Fatz!
Gruß
Rasmus