Wenn dein Problem oder deine Frage geklärt worden ist, markiere den Beitrag als "Lösung",
indem du auf den "Lösung" Button rechts unter dem entsprechenden Beitrag klickst. Vielen Dank!
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.
also, die Stelle, an der du deinen Speicherbedarf dauernd erhöhst, ist hier:
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
Wer die erhabene Weisheit der Mathematik tadelt, nährt sich von Verwirrung. (Leonardo da Vinci)
!! BITTE !! stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort!
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
Wer die erhabene Weisheit der Mathematik tadelt, nährt sich von Verwirrung. (Leonardo da Vinci)
!! BITTE !! stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort!
' 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
Wer die erhabene Weisheit der Mathematik tadelt, nährt sich von Verwirrung. (Leonardo da Vinci)
!! BITTE !! stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort!
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)!
' 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
Wer die erhabene Weisheit der Mathematik tadelt, nährt sich von Verwirrung. (Leonardo da Vinci)
!! BITTE !! stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort!