LabVIEWForum.de - Probleme mit Arbeitsspeicher!

LabVIEWForum.de

Normale Version: Probleme mit Arbeitsspeicher!
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo.

Ich lese Messdaten seriell ein und Protokolliere diese in eine Excel Datei. Klappt. Normalerweise liegt ein neuer Messwert nach 1min an. Die Aufzeichnung läuft über wochen....
Ich habe zum testen jetzt jetzt dauerhaft einen string anliegen und die while Schleife wird alle 5ms durchlaufen...
Wenn ich jetzt den speicherverlauf im task manager anschaue läuft der kontinuierliche an seine Grenze...
Leider habe ich keine Ahnung wie ich das verbessern kann.

LV.: 8.0
1 GB Ram

Gruß
Hallo,

also, die Stelle, an der du deinen Speicherbedarf dauernd erhöhst, ist hier:

[attachment=7357]

Da du alle Messwerte kontinuierlich im Speicher hältst (und das auch noch als 2-D-String-Array), muss der Speicherbedarf ja immer weiter ansteigen und somit natürlich irgendwann mal gegen eine Grenze laufen.

Übrigens, die Insert Into Array und die Build-Array-Funktionen allozieren außerdem bei jeder Operation neuen Speicher.

Rückfrage also: musst du alle Daten wirklich im Speicher halten? Wenn ja, dann hast du ein Problem! Wenn nein, dann brauchst du einen Ringpuffer.

MfG, Jens
Hallo Jens,

ich kann dir nicht genau sagen ob ich alle Daten im Speicher halten muss. Aber sie müssen kontinuierlich angezeigt und protokolliert werden.

Was ist denn ein Ringpuffer, oder wie kann ich es denn besser realisieren?
Hallo,

zum Thema Ringpuffer oder auch Ringspeicher, such mal im Forum nach Beiträgen von "i2dx" und dem Stichwort Ringspeicher.

Es ist ein Array-Speicherbereich, in dem du halt immer wieder neue Daten reinschreibst, dabei aber alte überschreibst (sozusagen eine FIFO-Puffer).

Ach ja, und die weiteren Build-Array-Aufrufe (bei den 1D-Numeric-Arrays), die du verwendest, sorgen natürlich auch für dauernd ansteigenden Speicherbedarf.

Wie gesagt, musst du wirklich alle Daten anzeigen? Gibt es eine Obergrenze, wie lang der Test läuft? Gibt es eine Obergrenze von Daten, die angezeigt werden müssen (z.B. die letzten 4 Wochen o.ä.)? Dann könntest du mit vorher initialisierten Arrays arbeiten, und dein Speicher steigt dann nicht dauernd an.

MfG, Jens
Ich muss max. die letzten 24 Stunden anzeigen. Aber die Protokollierung muss durchgängig erfolgen (ca. 4-6 Wochen).

MfG Marco
' schrieb:Ich muss max. die letzten 24 Stunden anzeigen. Aber die Protokollierung muss durchgängig erfolgen (ca. 4-6 Wochen).

MfG Marco
Hallo, Marco,

damit hast du also die Lösung deines Speicherproblems: Deine 1D-Arrays müssen maximal 1440 Elemente (60x24) groß sein. Diese Array-Größe kannst du vor deiner While-Schleife per "Initialize Array" festlegen. Dann den Ringspeicher einbauen.

Und das Abspeichern der Daten musst du natürlich inkremental erledigen und nicht wie jetzt, immer alles innerhalb eines Aufrufes in einen HTML-Report speichern.

MfG, Jens
Wäre es möglich das du mir das an einem array als bsp. mal zeigst? Mit inkremental abspeichern meinst du jeden neuen Messwert (und nicht das ganze array zum Report) hinzufügen?
Es lag an der Protokollierung. Die Arrays haben nicht weiter gestört. Erst wenn ich das Programm beende schreibe ich alle bis dahin angefallenen Messdaten in eine Datei (nicht wie vorher bei jedem Schleifendurchlauf)!

Vielen Dank für die UnterstützungRolleyes
' schrieb:Es lag an der Protokollierung. Die Arrays haben nicht weiter gestört. Erst wenn ich das Programm beende schreibe ich alle bis dahin angefallenen Messdaten in eine Datei (nicht wie vorher bei jedem Schleifendurchlauf)!
Aber den Speicheranstieg löst das trotzdem nicht. Aber ok, bei Messzeiten von 6 Wochen fallen grob überschlagen 60000 Datensätze an, das geht ja noch.

Aber jetzt mal ehrlich, bei der Messdauer willst du nicht zwischendrin mal die Daten wegspeichern??? Und wenn der Computer nach 5 1/2 Wochen zwecks Stromausfall o.ä. ausfällt? Oder aus sonstigen Gründen abschmiert? Dann sind die Daten weg.

Überleg dir das mal mit Zwischenspeichern, ist wirklich nicht schwer, ASCII-File öffnen, und in jedem Druchgang einfach die neuen Zahlen in einer neuen Zeile hinter dranhängen.

MfG, Jens
Referenz-URLs