Größere Datenmenge einlesen - 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: Größere Datenmenge einlesen (/Thread-Groessere-Datenmenge-einlesen) |
Größere Datenmenge einlesen - Simplicissimus1668 - 17.10.2012 14:29 Hallo zusammen, ich lese Daten als Strings aus einer 75MB *.csv Datei aus. Wenn ich mir die Speicherbelegung ansehe, dann benötigt das VI, dass ich mir gebaut hab jedoch über 500MB, um die Daten zu speichern. Dabei hab ich schon versucht mit der Inplace Struktur zu arbeiten. Offensichtlich nicht sehr erfolgreich. Hinweise woran es liegen könnte und wie ich die tatsächlich benötigte Speichermenge näher an die 75MB schieben kann? Dank schon im Vorraus. RE: Größere Datenmenge einlesen - GerdW - 17.10.2012 15:28 Hallo, wenn eine csv-Datei 75MB groß ist, kann sie bis zu 37.5M Zahlenwerte enthalten. Die benötigen dann (bei Speicherung als DBL) schon mal 300MB Speicher... Die Größe einer Textdatei ist nur "lose" mit dem Speicherbedarf gekoppelt! Man kann den Speicherverbrauch reduzieren, wenn man eigene Konvertierroutinen verwendet und auf SpreadsheetStringToArray (für die komplette Datei auf einmal) verzichtet. Die InPlace-Struktur, um Daten in einem 2D-Array zu ersetzen, das wiederum in einem Schieberegister gespeichert ist, bringt dir wahrscheinlich kaum etwas... RE: Größere Datenmenge einlesen - unicorn - 17.10.2012 20:31 Wenn ich das richtig sehe, liest Du aus ein, zwei, vielen Dateien ein. Also kann der Speicherbedarf entsprechend groß werden. Außerdem ist das Array nicht initialisiert, das in dem Shift-Register "umläuft". Also legt LV mit jeder Vergrößerung des Arrays, dieses automatisch neu an. Die Inplace-Struktur kommt m. E. erst beim zweiten Durchlauf des VI (das Shiftregister wird nicht geleert) zum Tragen. Wenn Du einmal sehr viele Daten eingelesen hast, ist die Datenmenge in dem Shift-Register entsprechend groß, so dass Du auch keine Abnahme des Speicherbedarfs sehen solltest, wenn Du danach nur eine kleinere Datenmenge einliest (weniger Dateien). RE: Größere Datenmenge einlesen - GerdW - 17.10.2012 20:45 Noch ein paar Punkte... Du hast mehrere Buffer in deinem VI: Daten werden im Schieberegister gespeichert (und belegen Speicher), der Array-Indicator belegt seine eigene Speicherkopie, evtl. kommen noch Buffer für den Datenausgang der ReadSpreadsheetFile-Funktion hinzu. Ruckzuck verdreifacht sich der eigentliche Speicherbedarf! RE: Größere Datenmenge einlesen - Lucki - 17.10.2012 21:54 Die wohl wirksamste Methode, Speicherplatz zu sparen, ist das zeilenweise Einlesen der Daten. Es wird nur der bewirklich benötigte Teil jeder Zeile weitergegeben, und nicht benötigte Zeilen werden ignoriert. Das dauert zwar länger, aber nur wenig und bei Weitem nicht so viel länger als man zunächst vermuten könnte. Man hat dann von vornherein nur den Teil der Daten im Speicher, den man wirklich braucht. RE: Größere Datenmenge einlesen - Simplicissimus1668 - 18.10.2012 09:27 Noch läufts nicht, aber immerhin hab ich jetzt einen Ansatz. Danke! RE: Größere Datenmenge einlesen - unicorn - 18.10.2012 11:35 Was auch noch eine Herausforderung bei sehr großen Arrays werden kann, ist die Verfügbarkeit eines entsprechend großen zusammenhängenden Speicherbereichs im RAM. Ich hatte regelmäßig Schwierigkeiten 500MB als 3D-Datenarray auf einem System mit 2GB-RAM in einem Stück einzulesen. |