![]() |
Probleme mit Arbeitsspeicher! - Druckversion +- LabVIEWForum.de (https://www.labviewforum.de) +-- Forum: LabVIEW (/Forum-LabVIEW) +--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein) +---- Forum: Datenbank & File IO (/Forum-Datenbank-File-IO) +---- Thema: Probleme mit Arbeitsspeicher! (/Thread-Probleme-mit-Arbeitsspeicher) |
Probleme mit Arbeitsspeicher! - Marco_81 - 08.07.2007 11:41 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ß Probleme mit Arbeitsspeicher! - jg - 08.07.2007 12:05 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 Probleme mit Arbeitsspeicher! - Marco_81 - 08.07.2007 12:12 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? Probleme mit Arbeitsspeicher! - jg - 08.07.2007 12:34 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 Probleme mit Arbeitsspeicher! - Marco_81 - 08.07.2007 13:11 Ich muss max. die letzten 24 Stunden anzeigen. Aber die Protokollierung muss durchgängig erfolgen (ca. 4-6 Wochen). MfG Marco Probleme mit Arbeitsspeicher! - jg - 08.07.2007 13:29 ' schrieb:Ich muss max. die letzten 24 Stunden anzeigen. Aber die Protokollierung muss durchgängig erfolgen (ca. 4-6 Wochen).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 Probleme mit Arbeitsspeicher! - Marco_81 - 08.07.2007 14:26 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? Probleme mit Arbeitsspeicher! - Marco_81 - 08.07.2007 17:18 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ützung ![]() Probleme mit Arbeitsspeicher! - jg - 08.07.2007 18:42 ' 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 |