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 

Dieses Thema hat akzeptierte Lösungen:

Handhabung großer Datenstreams



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!

09.06.2015, 03:17
Beitrag #4

macmarvin Offline
CLA
***


Beiträge: 445
Registriert seit: Sep 2006

2014
2004
EN

81373
Deutschland
RE: Handhabung großer Datenstreams

Akzeptierte Lösung

Schreiben und Lesen in Controls ist nicht gut... da werden zwingend immer Kopien angelegt.
Daten per Queue zu übergeben ist schon recht zielführend, da diese bei richtiger Benutzung keine Kopie anlegen. Dazu gibt's auch Beispiele Stichwort SEQ Single Element Queue (in der Community bei den LV Examples keine Ahnung, aber z.B. im LV Advanced Kurs). In deinem Fall bieten sich natürlich Queues mit mehreren Elementen an. Die Queue sollte größenbeschränkt und der Platz für die Elemente (nach oben abgeschätzt) vorallokiert sein (Prealloc Queue). Falls Du das RT-Modul hast, kannst Du auch die RT-Fifo Funktionen unter Windows nutzen, da müssen die Arrays aber wirklich immer gleich groß sein.
Alternativ könntest Du auch eine Menge DVRs für deine Arraysbrocken anlegen, diese auch wieder vorallokieren und damit einen Ringpuffer bauen.
Da müsstest Du allerdings die Zeigerlogik selbst schreiben, d.h. welche Page als nächste gelesen/beschrieben werden soll.
Oder baust eine DVR mit einem großen Array (vorallokiert) und den Lese/Schreibe-Zeigern (I32s) und schreibst die Arraybrocken per Replace Array Subset.
Dabei musst du allerdings aufpassen, das weder der Producer noch der Consumer die DVR zu lange blockiert.
Allgemein würde ich noch darauf schauen nicht zu kleine Arraystückchen zu transportieren.

Welche Verarbeitungen machst Du denn, bzw. wie groß sind die Datenbrocken die Du dabei im (kontinuierlichen) Zugriff brauchst?


(08.06.2015 10:55 )Kiesch schrieb:  
(03.06.2015 12:41 )jg schrieb:  2) Daten in eine Queue zu übergeben erzeugt in der Regel Datenkopien, da die Queue als Zwischenspeicher für 1 bis x Elemente dient.

Wie mache ich das dann besser? Einlesen direkt in nen Indikator schieben und eine Referenz darauf übergeben? Die gelesenen Arrays in einem Cluster Kapseln und dann ein Array daraus machen? Das erzeugt doch dann jeweils ne Kopie der gesamten Struktur, wenn ich da mit Build Array was anhänge, oder?

Oder gibt es irgendeine andere Möglichkeit in Labview (unter der Haube) mit Referenzen zu arbeiten?
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Antwort schreiben 


Nachrichten in diesem Thema
RE: Handhabung großer Datenstreams - macmarvin - 09.06.2015 03:17

Möglicherweise verwandte Themen...
Themen Verfasser Antworten Views Letzter Beitrag
  LabView Fehlercluster Handhabung hansi9990 5 4.413 12.10.2016 00:37
Letzter Beitrag: rolfk
  Größer, Kleiner UND Gleich jan_1 10 11.876 07.07.2015 13:57
Letzter Beitrag: Kiesch
  Arbeitsspeicher bei Übergabe großer Cluster ib 2 3.899 07.01.2014 13:47
Letzter Beitrag: ib
  nur einen Wert der größer=0 ist darstellen sonst Fehler ausgeben [Newbie] aas430 4 4.968 10.10.2012 09:00
Letzter Beitrag: jg
  1D Arry nach größer durchsuchen und Index ausgeben Schraqnzy 13 10.050 13.09.2012 11:29
Letzter Beitrag: GerdW
  Wert in Array zwischenspeichern wenn größer/ungleich 0 udcno@AL 10 10.910 18.11.2010 09:20
Letzter Beitrag: M Nussbaumer

Gehe zu: