LabVIEWForum.de - "Messwerte in Datei schreiben" müllt Arbeitsspeicher zu

LabVIEWForum.de

Normale Version: "Messwerte in Datei schreiben" müllt Arbeitsspeicher zu
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Seiten: 1 2
Moin,

Ich erfasse Daten, speichere sie zwischen in Arrays und schreibe diese dann, wenn ich genug gesammelt habe, in Dateien.
Jedoch werden nach dem Abspeichern der Daten auf HD (durch "Messwerte in Datei schreiben") die Daten im Arbeitsspeicher nicht gelöscht.

Das ganze schaut so aus: Eine "Hauptschleife", die die DAQmx Datenerfassung startet, eine "Unterschleife", die alle 500ms die Daten vom DAQ abholt und diese in Arrays einfügt. Habe ich genug Daten gesammelt, wird die "Unterschleife" abgebrochen, das VI Messwerte in Datei schreiben wird aufgerufen, Daten werden gespeichert, "Hauptschleife" wird erneut aufgerufen.

Die Auslagerungsdatei zeigt mir während dem "Ansammeln" der Daten Werte zwische 800 MB und 1 GB an, je nachdem wie lange ich ansammle. Wird nun jedoch diese Schleife abgebrochen und das Speicher-VI aufgerufen schnellt die Größe der Auslagerungsdatei auf 1,5 GB hoch und bleibt dort ! Selbst wenn das VI fertig gespeichert hat und meine Hauptschleife wieder aufgerufen wird, bleibt die Auslagerungsdatei bei 1,5GB oben, was den PC natürlich langsamer macht. Stoppe ich mein Programm, bleibt selbst dann die Auslagerungsdatei bei 1,5GB stehen. Erst beim Beenden von Blockdiagramm und Frontpanel wird der Platz wieder freigemacht.

Meine Frage: Wie kann ich während des Ausführens meines VI's den Arbeitsspeicher leeren. Die Hauptschleife besitzt keine Register, keine globalen Variablen, nichts. Kein Bit sollte von einem auf den anderen Schleifendurchgang übernommen werden.
Hi,

du hast sehr genau beschrieben, was Du machst, irgendwie fehlt mir aber ein Block der sowas macht wie Deine temporären Arrays löschen... Wenn Du das nicht nach dem Schreiben machst, behält LV die natürlich im Speicher...
Vielleicht ist's ja aber auch so selbstverständlich, dass man das macht, dass Du es nicht erwähnt hast...;)Dann hilft aber denke ich nur ein VI oder so, um mal weiter zu schauen (oder jemand, der mehr Wissen über die Arbeitsspeicherverwaltung von LV hat als ich...Wink

ch
Der Datenstrang meines "Sammelarrays" läuft in das VI "Messwerte in Datei speichern" und endet dort. Nach dieser Aktion endet der aktuelle Schleifendurchlauf und es beginnt ein neuer. Daten werden nicht mit in den neuen hinübergeschleppt. Keine. Kein Register, Knoten, keine globalen Variablen. Schleifendurchgang zu Ende, neuer beginnt. Wo und wie sollte ich da noch Arrays löschen ?

Ich denke das Problem sind auch nicht die temp. Arrays sondern Das VI Messwerte in Datei speichern. Das baut mir die 1,5GB Auslagerungsdatei, die dann stehen bleibt bis zum Ende aller Tage.
' schrieb:Ich denke das Problem sind auch nicht die temp. Arrays sondern Das VI Messwerte in Datei speichern. Das baut mir die 1,5GB Auslagerungsdatei, die dann stehen bleibt bis zum Ende aller Tage.

Ich würde sagen...GENAU! Da sieht man mal wieder: ExpressVI's sind der größte Mist! Schmeiß das Ding raus uns speichere "zu Fuß" mit den entsprechenden File IO VI's (z.B. Write Spreadsheet, Write Text File)
Super, Danke Achim, genau das wars. Habs schnell nachgebaut - Speicher wird jetzt super leergeräumt bei jedem Schleifendurchlauf. Jedoch stehe ich nun vor einem neuen Problem:

Sobald ich eine Matrix mit mehr als (ca.) 21 Millionen Werten in eine Datei schreiben möchte, bekomm ich die Meldung:

"Memory is full" - bezogen auf das "Write to Spreadsheet"-VI

Maximale Dateigröße, erzeugt durch Matrizen, die ich durch "Write to Spreadsheet" in eine Textdatei speichern kann scheint so ca. 130 MB zu sein. Ist das die Regel in LabVIEW und man muss bei größeren Datensätzen splitten und mehrfach speichern oder gibt es auch eine Möglichkeit noch größere Dateien zu erzeugen ?

Ähnliche Frage: Sobald ich eine Matrix mit mehr als 50 Millionen Werten bauen möchte, bekomme ich eine ähnliche Fehlermeldung, dass der Speicher nicht ausreicht. Normallfall ?

Oder hängen beide Probleme mit meinem spärlichen Arbeitsspeicher (1GB) zusammen ?
Ist da was für Dich dabei?

Gruß Markus
' schrieb:Ist da was für Dich dabei?

Gruß Markus

Danke, das klärt wieso ich Arrays nur bis zu einer bestimmten Größe bauen kann, leider aber noch nicht, wieso ich nur Dateien bis 130MB speichern kann, auch wenn der Array noch Platz gehabt hätte.
' schrieb:Maximale Dateigröße, erzeugt durch Matrizen, die ich durch "Write to Spreadsheet" in eine Textdatei

"Write to Spreadsheet" rausschmeissen und zeilenweise schreiben - du kannst Daten schreiben bis das OS aufgibt.

Gottfried
' schrieb:"Write to Spreadsheet" rausschmeissen und zeilenweise schreiben - du kannst Daten schreiben bis das OS aufgibt.

Gottfried

du meinst also pro zeile, also 1 million mal, ein schleifendurchlauf und ne zeile speichern ? eine million schleifendurchläufe ? ich glaub selbst ohne zeilenspeichern in der schleife würde das zu lange dauern. gibts alternativen ?
' schrieb:du meinst also pro zeile, also 1 million mal, ein schleifendurchlauf und ne zeile speichern ? eine million schleifendurchläufe ? ich glaub selbst ohne zeilenspeichern in der schleife würde das zu lange dauern. gibts alternativen ?
10 Zeilen auf einmal schreiben -> nur noch 100.000 Durchläufe.
100 Zeilen auf einmal schreiben -> nur noch 10.000 Durchläufe.
etc etc.

Das Problem bei Write To Spreadsheet: Wenn du da ein sehr großes Array auf einmal schreiben willst, dann wandelt dieses VI das gesamte Array erst mal in einen Spreadsheet-String! Das braucht Speicher und dauert natürlich.
Also muss ein Kompromiss her.
Probier doch erst mal zeilenweise, vielleicht geht es schneller als du denkst.

Gruß, Jens
Seiten: 1 2
Referenz-URLs