Größe von StringList
-
Hi ich habe bereits eine StringListe, wo ich Werte reinschreibe. Es handelt sich dabei um ein Programm, welches Werte über einen bestimmten Zeitraum einlesen soll . Pro Sekunde werden etwa 400 Werte eingelesen und gespeichert(mit TFileStream). Wenn ich also 5 Stunde messe, sind das 120000 Werte. Nun will ich wissen, ob man diese Werte alle in eine StringList schreiben kann. Ich glaube nämlich, das Stringlist nur eine Kapazität im Bereich vom Integer(32k und paar zerquetschte) hat.
mfg
evilempire81
-
warum probierst du denn nicht einfach mal aus, wieviel elemente in die stringliste passen?
die groesse der liste ist an den arbeitsspeicher gekoppelt, maximal passen aber nur MAX_INT / 16 elemente rein. schonmal daran gedacht die werte auch wieder aus der liste zu löschen?
-
mhhh ich hab mal geschaut und probiert und ich habe die Kapazität auf 120000 gesetzt und er hat nicht gemeckert, also denke ich mal es funzt mit so vielen Werten. Das mit dem Abspeichern und löschen ist eine gute Idee, hab ich ehrlich gesagt auch noch garnicht daran gedacht. Also danke für den Tipp.
mfg
evilempire81
-
ich habe gerade ein test gemacht.. schreibe mit ner while schlaufe immer 10 zeichen in ein StringList..
bin gerade ca bei 4Mios Stringe. ohne grenze in sicht.. also sollte reichen für den anfang
-
Da fragt man sich doch, ob es sinnvoll ist, den Speicher so "zuzumüllen"... Was ist wohl bei leuten, die nicht so viel Ram haben?
Kann man da nicht zu bestimmten Zeitpunkten anfangen Werte auf Platte zu speichern?
-
Vorschlag:
Werte einlesen, mit Zeitstempel versehen und nur bei Werteänderung in Liste speichern. 1,45*10²³ mal den selben Ψert hintereinander einzulesen und abzuspeichern macht echt keinen Sinn.
-
Also ich weiß nicht, aber wenn ich solche Messwerte erfasse, müssen die im Regelfall auch irgendwann ausgwertet werden. Da bietet es sich an, die Daten gleich in eine Datenbank zu schreiben. Erleichtert die anschließende Auswertung um einiges.
-
Bei großen Mengen von Messwerten ist eine Datenbank aus Performancegründen ungeeignet, es sei den die Werte kommen im Minutentakt. Wenn er pro Sekunde 400 Werte einlesen soll na Prost Malzeit das geht nur in eine lokale binäre Datei oder eine Liste im Ram die später auf Platte oder DB gesaved wird.
-
'Garantierte' 400 Messwerte pro Sekunde dürfte schon Windows als solches nicht verarbeiten können... Bei mir sind das dann nach 5 Stunden aber auch 7.200.000 Messwerte. Irgendwo hat er sich vertan, entweder nach 5 Min 120.000 Messwerte, oder 400 Messwerte pro Minute statt pro Sekunde.
-
ich habe tatsächlich verrechnet(habe ein 60 mal vergessen)...also ich lese die Werte ja nicht nur ein, sondern visualisiere und speichere Sie auch noch nebenbei.
Die Daten werden über WLan bereitgestellt. Die Daten verändern sich auch jedesmal.
Aber das Programm läuft soweit stabil, bis auf eine Exception, wo ich noch net weiss, wo die herkommt ....deshalb mach ich bald mal einen neuen Beitrag, wenn ich selber nix dazu finde.mfg
evilempire81
-
hm, wie gesagt, ich halte Windows schon nicht in der Lage, 400 Messwerte pro Sekunde über Stunden hinweg korrekt zu verarbeiten. Über WLAN schon gleich gar nicht... Aber ich lasse mich gerne eines besseren belehren.
Aber so rein interessehalber: Was für ein Gerät liefert 400 Messwerte pro Sekunde? Ich komme aus dem Bereich Tempereatur-, Mess- und Regeltechnik. Hier sind 400 Messwerte pro Sekunde utopisch. Es gibt keine Geräte die in einem solch kurzen Messzyklus exakte Daten liefern können.
-
Sunday schrieb:
die groesse der liste ist an den arbeitsspeicher gekoppelt, maximal passen aber nur MAX_INT / 16 elemente rein.
Außerdem liegt es am Betriebssystem, wie viel er reinlässt... im Programm nicht, aber wenn er siespeichert... unter Windowssystemen 32Bit und < WinXP sind es z.B. max. 4GB pro Datei... also mehr als 4 GB kann er in keine Datei speichern, außer er hat XP, ich glaub da sind es 16GB... k.a. oder aber doch auch nur 4GB... müsste man mal testen.
-
Ich schreibe gerade meine Diplomarbeit bei einer Firma die sich mit Mikroelektronik befasst. Die haben hier einen Sensor der mittels Infrarot Vitalparameter erfasst. Um nun auch am Menschen messen zu können und dabei mobil zu sein, wird die Elektronik des Sensors mit einem PDA verbunden (RS232). Das Programm für den PDA ist schon fertig und funktioniert sehr gut. Die Daten schickt der PDA in 512 Byte grossen Blöcken mittels WLan weg. Der Pc empfängt und visualisiert und speichert die Werte. Zudem wird noch eine Datenbank erstellt, wo sich Benutzerdaten eintragen lassen. Die Werte werden, aber nicht in die Datenbank sondern in jeweils einer Datei.
Probleme habe ich im Moment noch bei der WLanübertragung. Ich habe die ganz normale Komponente aus BCB6 genommen. Funktioniert soweit ganz gut, bis irgendwann
der Buffer mehr oder weniger Werte einträgt als er eigentlich haben sollte ( nämlich 512). Ich hab deshalb schonmal ein Beitrag hier ins Forum geschrieben, aber eher erfolglos.->zu der Anzahl in der StringList: Sensor hat 3 Kanäle (pro Sekunde macht ein Kanal 128 Werte * 3Kanäle = 384 (ca. 400))
Mein "WLanProtokoll" überträgt maximal 512 Byte, das sich aus 46 * 11Byte grossen Einzelpaketen zusammensetzt und ein paar Nullen.
Das 11Byte Paket besteht aus 2 Synchronbytes und der rest Datenbytes.
Das heisst also ich schicke 3 Mal pro Sekunde 512 Byte, da 11Byte * 128 Werte etwa eine Sekunde ergibt.So genug verraten, aber wenn einer eine Lösung hat, warum auf einmal mehr bzw. machmal weniger als 512 Byte im Puffer bereit stehen kann er Sie gerne posten.
mfg
evilempire81