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 

Performance vom Dateneinlesen zu gering



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!

15.12.2010, 14:55 (Dieser Beitrag wurde zuletzt bearbeitet: 15.12.2010 15:01 von mrstrom.)
Beitrag #1

mrstrom Offline
LVF-Grünschnabel
*


Beiträge: 42
Registriert seit: Nov 2010

2009
2010
kA


Deutschland
Performance vom Dateneinlesen zu gering
Hallo LabViewforum:

ich habe folgende Aufgabe zu bewältigen:

ich bekomme einen Datensatz einer Messung als txt Datei. Jede Zeile dieser Datei ist eine eigenständige Messung. In einer Messung werden mehrere Parameter gleichzeitig gemessen. In den obersten beiden Zeile befinden sich keine Messdaten sondern eine Kommentarzeile die mit # abgeschlossen wird und in der zweiten Zeile die Namen der Parameter die mit * abgeschlossen wird. Weiterhin wird jede Messung mit ? abgeschlossen. Die einzelnen Parameter in einer Messung werden durch ; voneinander getrennt.

Nun sollen die Daten wieder für LabView zur Weiterverarbeitung eingelesen werden. Dazu habe lich das VI Load Data geschrieben (unten angehängt). Die Daten werden eingelesen und dann für jede Messung in ein Control "Mustercluster" geschrieben. Alle Messungen sollen dann ein Array aus beschriebenen Musterclustern ergeben das den Ausgang des Vis bilden muss (Vorgabe vom Chef).
Außerdem sollte die Sache wenn irgendwie möglich mit dem Control Mustercluster nicht abgeschafft werden da es sich in vielen anderen SubVIs wiederfindet und quasi Kern des ganzen Projektes ist und je nach Messung geändert werden können sollte. Befindet sich in der text datei ein Parameter der nicht im Mustercluster vorhanden ist soll dieser auch nicht berücksichtigt werden. Befindet sich im Mustercluster ein Parameter der nicht in der txt Datei vorhanden ist soll dieser mit NAN oder 0 belegt werden.

Das Problem ist das es bei größeren Datenmengen relativ langsam geht. Bei 100 Messungen dauert es schon mehrere Sekunden. Die Dateien sollen aber später bis zu mehrere Tausend Messungen enthalten können.

Außerdem ist mir aufgefallen das am Anfang das Cluster langsam gefüllt wird spätere Cluster dann aber immer schneller gefüllt werden können.

Ich habe gelesen, dass der häufige Aufruf von Propertie Nodes die Performance verringert, daher habe ich noch das VI " Load data mit wenig Property Nodes" geschrieben bringt aber kaum einen Zeitvorteil.

Was kann ich verbessern so, dass man die Daten in relativ kurzer Zeit einlesen kann? Wenn es keine andere Möglichkeit gibt könnte ich zur Not das Format der Datei ändern ( aber nur wenn es unbedingt sein muss.

Wo kann ich mich gezielt informieren wie LabView intern und in den zur Verfügung gestellten VIs arbeitet. Was kostet am meisten Speicher und Rechenzeit?

Hoffe ihr könnt mir ein paar nützliche Tipps geben.

ich hänge mal meine beiden VIs an und eine Beispiel Daten txt datei.

MrStrom

Mist wie kann ich denn jetzt die VIS anhängen ???
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
15.12.2010, 15:03 (Dieser Beitrag wurde zuletzt bearbeitet: 15.12.2010 15:07 von GerdW.)
Beitrag #2

GerdW Offline
______________
LVF-Team

Beiträge: 17.467
Registriert seit: May 2009

LV2021
1995
DE_EN

10×××
Deutschland
Performance vom Dateneinlesen zu gering
Hallo mrstrom,

Zitat:Mist wie kann ich denn jetzt die VIS anhängen ???
volles editieren, unter dem Texteingabefeld...

Ansonsten aus deinem Text destilliert:
Datei mittels ReadFromTextfile einlesen. "?" rausfiltern. Mit ";" als Trennzeichen per SpreadsheetstringToArray umwandeln. Die ersten beiden (Array-)Zeilen getrennt auswerten. Den Rest in Zahl (oder was auch immer gewünscht ist) umwandeln.

Zitat:Wo kann ich mich gezielt informieren wie LabView intern und in den zur Verfügung gestellten VIs arbeitet. Was kostet am meisten Speicher und Rechenzeit?
Menü Tools->Profile...

Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
15.12.2010, 15:08
Beitrag #3

jg Offline
CLA & CLED
LVF-Team

Beiträge: 15.864
Registriert seit: Jun 2005

20xx / 8.x
1999
EN

Franken...
Deutschland
Performance vom Dateneinlesen zu gering
Offtopic2
:hmmBig Grinu hast doch schon VIs hochgeladen?
Hier ein Link: http://www.labviewforum.de/Tutorial-Upload...hots-t5907.html
Gruß, 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!

Einführende Links zu LabVIEW, s. GerdWs Signatur.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
15.12.2010, 15:20
Beitrag #4

mrstrom Offline
LVF-Grünschnabel
*


Beiträge: 42
Registriert seit: Nov 2010

2009
2010
kA


Deutschland
Performance vom Dateneinlesen zu gering
Ja aber bei mir gibt es den button durchsuchen aufeinmal nicht mehr
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
15.12.2010, 15:41
Beitrag #5

mrstrom Offline
LVF-Grünschnabel
*


Beiträge: 42
Registriert seit: Nov 2010

2009
2010
kA


Deutschland
Performance vom Dateneinlesen zu gering
Ah so jetzt hab iches. ich glaube das lag an meinem Internetbrowser

hier die Daten und die vis

die LabViewversion ist LabView2009 da ich sie in der uni auf einem rechner erstellt habe


Angehängte Datei(en)
Sonstige .txt  test2.txt (Größe: 3,32 MB / Downloads: 515)

Sonstige .vi  Load_Data.vi (Größe: 34,6 KB / Downloads: 168)

Sonstige .vi  Load_Data_mit_wenig_PropertyNodes.vi (Größe: 34,35 KB / Downloads: 146)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
15.12.2010, 16:11
Beitrag #6

Richard Offline
LVF-Gelegenheitsschreiber
**


Beiträge: 70
Registriert seit: Jun 2009

8.6,9.0,9.1,10.0,11.0
2008
DE_EN

80797
Deutschland
Performance vom Dateneinlesen zu gering
Der Mustercluster wäre noch ganz praktisch.

<edit> in der test2.txt sind die Messungen nicht mit ? terminiert, und nur die erste Zeile ist durch ; getrennt, ist das so korrekt? <edit>

Gruß Richard

Murphy was an optimist
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
15.12.2010, 17:00
Beitrag #7

Richard Offline
LVF-Gelegenheitsschreiber
**


Beiträge: 70
Registriert seit: Jun 2009

8.6,9.0,9.1,10.0,11.0
2008
DE_EN

80797
Deutschland
Performance vom Dateneinlesen zu gering
Ich löse so etwas ohne PropertyNodes.
Die einträge im Cluster sind scheinbar immer die Gleichen, dann kannst du dir doch einfach eine Case Struktur mit diesen anlegen und dann über Bundle by Name füllen.
Inwieweit das bei größeren Dateien Performat ist kann ich nicht genau sagen, da deine Testdatei nicht deinem Beschriebenem Format entspricht.
In dem unten angegebenen Beispiel habe ich die beiden ersten Messwertzeilen auf deine Beschreibung geändert.

Du kannst über die Größe des Arrays auch schon das Ergebnis Array indizieren, und immer nur ersetzen, das müsste schneller gehen als das Autoindizieren der Forschleife.
Über die Clusterkonstante kannst du die Standardwerte definieren. Der Defaultcase wird bei umbekannten Messwertbezeichnern druchlaufen, also werden diese herausgefiltert.

Über die Anzal kannst du die Menge der einzulesenden Zeichen Steuern, -1 -> gesamte Datei
Das ersetzen der ? durch einen Zeilenumbruch erzeugt das 2D-Array

Gruß Richard


   

Murphy was an optimist
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
15.12.2010, 19:02 (Dieser Beitrag wurde zuletzt bearbeitet: 15.12.2010 19:16 von GerdW.)
Beitrag #8

GerdW Offline
______________
LVF-Team

Beiträge: 17.467
Registriert seit: May 2009

LV2021
1995
DE_EN

10×××
Deutschland
Performance vom Dateneinlesen zu gering
Hallo mrstrom,

wer hat sich bloß dieses Format ausgedacht...

Zitat:eine Kommentarzeile die mit # abgeschlossen wird und in der zweiten Zeile die Namen der Parameter die mit * abgeschlossen wird. Weiterhin wird jede Messung mit ? abgeschlossen. Die einzelnen Parameter in einer Messung werden durch ; voneinander getrennt.

Ausschnitt der Text-Datei:
Zitat:17.11.2010 15:25
#
Anzahl Spektren; v_block[V]; v_inject[V]; v_drift[V]; v_aperture[V]; Injection Time; Numeric; Numeric 2; Numeric 3; Spektrum*
54795,000000; -2,024690; 249,973020; 2027,981440; 0,731300; 100,000000; 0,000000; 0,000000; 0,000000; 1,197910' 1,575700' 1,249882' 1,147089' 1,122492' 1,147639' 1,091119' 0,232609' 1,186198' 1,162226'

Format mal aufgedröselt:
- erste Zeile mit Datum + Uhrzeit
- zweite Zeile mit einem #
- dritte Zeile mit Kanalnamen, beendet mit einem *
- vierte Zeile: zuerst die Werte zu den Kanalnamen, jeweils durch ein ";" abgetrennt, danach (ohne Zeilenende dazwischen!) die Spektrumswerte, diesmal getrennt mit einem Hochkomma (! Wieso das denn?)
- ganz am Ende: wieder ein ";", ein "?", ein ";" mittendrin noch ein Zeilenende...
Und noch besser: zusätzlich zu den Trennzeichen noch jede Menge Leerzeichen (statt einfach ein Tab dazwischen zu setzen)

Also Lösung:
-Datei lesen
- am # splitten, Datum+Uhrzeit auswerten
- am * splitten, Kanalnamen auswerten (falls nötig, anscheinend sind die ja feststehend, da du schon einen Cluster vorbereitet hast)
- Werte entsprechend Kanalnamen lesen, (z.B. mit einer FOR-Schleife), die Werte mit BundleByName in den vorbereiteten Cluster eintragen
- am nächsten ";" splitten (dies wäre das nach den Spektrumswerte), per SpreadsheetstringToArray mit Trennzeichen "'" (Hochkomma) in ein Array of DBL umwandeln, in Cluster eintragen
Fertig!

So sieht das aus (ohne das BundleByName und einige kleinere AuswertungenSmile):
   
Laden deiner Datei in unter 1s...

Zitat:Wenn es keine andere Möglichkeit gibt könnte ich zur Not das Format der Datei ändern ( aber nur wenn es unbedingt sein muss.
Mein Vorschlag:
- Sinnvoller Einsatz von Zeilenendezeichen
- statt mehrerer Leerzeichen nur ein Tab zwischen den Werten, Verzicht auf ";" und Hochkomma (da ja schon das Tab als Trennzeichen vorhanden und ausreichend ist)
- wenn Spektrumswerte eindimensional sind, dann alle Werte untereinander oder zumindest auf maximal 16 Werte pro Zeile begrenzt (dann meckert Excel nicht beim Einlesen deiner Textdatei!), Anzahl der Werte steht ja schon im Header

Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
15.12.2010, 20:02 (Dieser Beitrag wurde zuletzt bearbeitet: 15.12.2010 23:30 von Lucki.)
Beitrag #9

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

Beiträge: 7.699
Registriert seit: Mar 2006

LV 2016-18 prof.
1995
DE

01108
Deutschland
Performance vom Dateneinlesen zu gering
Quick&dirty Variante, kurz vor der Tagesschau:
Lv10
Sonstige .vi  Load_Data2.vi (Größe: 22,32 KB / Downloads: 205)

   

Gefühlte Dauer: 300ms
Anm: Die Steuerzeichen #,*,? werden eigentlich gar nicht gebraucht, die Zeilenendezeichen allein reichen für die Separierung der Daten aus. Hier im VI wurde die Separierung der Daten allein mit Zeilenendezeichen gemacht und die Steuerzeichen entfernt.

Die andere Metoide wäre, die Zeilenendezeichen aus der Datei zu entfrenen bzw. zu ignorieren und zur Separierung der Daten allein die Steuerzeichen zu verwenden. Das ist wohl mehr im Sinn des Erfinders.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
16.12.2010, 11:16
Beitrag #10

mrstrom Offline
LVF-Grünschnabel
*


Beiträge: 42
Registriert seit: Nov 2010

2009
2010
kA


Deutschland
Performance vom Dateneinlesen zu gering
Hallo,

erstmal vielen Dank an euch für eure sehr schnellen Antworten.

@Richard:
ich hänge gleich mal das Mustercluster an damit du dir ein besseres Bild machen kannst. Es müssten aber alle Parameter in allen Zeilen durch ein ; getrennt sein. Das Spektrum betrachte ich als ein Parameter mit 2000 Werten. Im Spektrum habe ich die einzelnen Werte mit ' getrennt.
Wahrscheinlich kann dein editor die txt datei nicht ordentlich darstellen weil sie so viele Spalten hat. Bei mir geht es besser mit Word Pad.
Außerdem verstehe ich nicht warum du ein 2D Array brauchst? und die Messdaten werden bei dir auch nicht den richtigen Überschriften zugeordnet. Außerdem steigt die Anzahl der Spektren nicht immer um 1 sie kann auch mal um 2 oder 3 springen, da die Hardware manchmal einzelne Spektren nicht einliest.

@GerdW:

Das Format habe ich mir ausgedacht, und sehe auch langsam ein das es nicht gerade eine gute Wahl war. Aber haben die vielen Trennzeichen den einen großen Einfluss auf die Performance? Es müsste doch eigentlich egal sein ob man auf einen Zeilenumbruch schaut oder auf ein Zeilenumbruch?
Zu deiner Lösung: Ja sie leuchtet mir ein aber das größte Problem ist für mich die Daten die jetzt einzeln in deiner Lösung vorliegen, dynamisch in einem Cluster (bei mir Mustercluster) zusammenzufügen in dem die Daten den einzelnen Clusterelementen den Kanalnamen richtig zugeordnet werden.

Woher weißt du dass die Anzahl der Werte im Header steht?


@Alle

Gibt es irgendwelche Grundregeln was besonders schlecht für die Performance ist?
Wie z.B Property Nodes, Indizierung durch Schleifen, Referenzen.

Wie finde ich heraus welches VI wie auf den Speicher zugreift und ggf. Kopien der Daten anlegt und so weiter. Gibt es Möglichkeiten zu sehen was intern passiert oder ist alles wirklich so gut gekapselt?

Ich habe hier im Forum gelesen das ein Mitglied in einem ähnlichen Fall zum TDMS Datenformat geraten hat, dann wären für mich die Formatprobleme schnell gelöst, aber die Datei wird leider sehr groß. Was haltet ihr von diesem Format in meinem Fall?


Angehängte Datei(en)
Sonstige .ctl  MusterCluster.ctl (Größe: 5,75 KB / Downloads: 144)
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
  Probleme mit Performance (Berechnungen und Grafik) catbull 5 4.661 21.07.2018 10:13
Letzter Beitrag: IchSelbst
  Performance beim Betrieb über WLAN Heber 9 5.893 22.08.2017 14:28
Letzter Beitrag: Heber
  Melder Performance D_Sev 13 11.134 08.09.2014 10:56
Letzter Beitrag: GerdW
  Unerwarteter Performance-Einbruch D_Sev 4 4.801 11.11.2013 12:36
Letzter Beitrag: jg
  Performance von Tabelle/Listenfeld schreiben derherrk 8 6.516 03.06.2013 08:28
Letzter Beitrag: Achim
  LabView-Performance yusuf 89 4 4.961 14.05.2013 08:30
Letzter Beitrag: Y-P

Gehe zu: