INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.


Antwort schreiben 

Größere Datenmenge einlesen



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!

17.10.2012, 14:29
Beitrag #1

Simplicissimus1668 Offline
LVF-Neueinsteiger


Beiträge: 6
Registriert seit: May 2012

2011
2007
DE



Größere Datenmenge einlesen
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.


Angehängte Datei(en) Thumbnail(s)
   
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
17.10.2012, 15:28
Beitrag #2

GerdW Offline
______________
LVF-Team

Beiträge: 17.412
Registriert seit: May 2009

LV2021
1995
DE_EN

10×××
Deutschland
RE: Größere Datenmenge einlesen
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...

Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
17.10.2012, 20:31
Beitrag #3

unicorn Offline
LVF-Freak
****


Beiträge: 680
Registriert seit: Jul 2009

8.6.1, 2010 - 2012
1994
EN

10xxx
Deutschland
RE: Größere Datenmenge einlesen
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).
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
17.10.2012, 20:45
Beitrag #4

GerdW Offline
______________
LVF-Team

Beiträge: 17.412
Registriert seit: May 2009

LV2021
1995
DE_EN

10×××
Deutschland
RE: Größere Datenmenge einlesen
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!

Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
17.10.2012, 21:54 (Dieser Beitrag wurde zuletzt bearbeitet: 18.10.2012 06:34 von Lucki.)
Beitrag #5

Lucki Offline
Tech.Exp.2.Klasse
LVF-Team

Beiträge: 7.699
Registriert seit: Mar 2006

LV 2016-18 prof.
1995
DE

01108
Deutschland
RE: Größere Datenmenge einlesen
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.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
18.10.2012, 09:27
Beitrag #6

Simplicissimus1668 Offline
LVF-Neueinsteiger


Beiträge: 6
Registriert seit: May 2012

2011
2007
DE



RE: Größere Datenmenge einlesen
Noch läufts nicht, aber immerhin hab ich jetzt einen Ansatz. Danke!
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
18.10.2012, 11:35
Beitrag #7

unicorn Offline
LVF-Freak
****


Beiträge: 680
Registriert seit: Jul 2009

8.6.1, 2010 - 2012
1994
EN

10xxx
Deutschland
RE: Größere Datenmenge einlesen
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.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Antwort schreiben 


Möglicherweise verwandte Themen...
Themen Verfasser Antworten Views Letzter Beitrag
  Größere Datenmenge einlesen und darin herumscrollen Lumberjacker 5 3.832 23.05.2013 15:38
Letzter Beitrag: jg
  große Datenmenge sekündlich speichern jojo 8 5.297 03.12.2008 15:13
Letzter Beitrag: oenk

Gehe zu: