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!
in einem Projekt möchte ich auf Daten je Prüfobjekt zugreifen.
Ich würde je Prüfobjekt eine DVR erstellen. Für den Datenzugriff verwende ich dann diese DVR und die inplace Struktur.
Nun meine Frage:
Wie werden die Referenzen am besten weitergegeben?
Ich dachte an eine FGV!? Müsste ich dann bei der FGV ein Array mit den DVR`s füllen?
Wenn ja, wie ist es wenn ich eine DVR freigeben(lösche), muss das Element des Array in der FGV dann auch gelöscht werden...?
(26.08.2015 12:22 )GT123 schrieb: Ich dachte an eine FGV!? Müsste ich dann bei der FGV ein Array mit den DVR`s füllen?
Wenn ja, wie ist es wenn ich eine DVR freigeben(lösche), muss das Element des Array in der FGV dann auch gelöscht werden...?
Hallo,
das Problem bei Arrays, aus denen ungenutzte Elemente gelöscht werden ist die Zuordnung aller nachfolgenden Elemente, deren Indizes sich ja ändern.
Eine andere Möglichkeit wäre ein vorinitialisiertes Cluster-Array oder 2 parallele Arrays, so dass ein Valid-Bit mitgeführt werden kann.
Beim Freigeben einer DVR kann dann das entsprechende Bit auf invalid gesetzt werden und beim Neuanlegen eines Elements kann der nächste Invalid-Index gesucht werden.
ok, also wenn ich es richtig verstanden habe könnte ich ein Array erstellen und das Element wäre ein Cluster [welches wiederum z.B. aus einem integer (DUT Nummer), bit (Invalid/valid) und den eingentlichen Daten besteht].
Dann müsste ich bei dem Zugriff auf die Daten nach z.b. der DUT Nummer suchen...
Hast du es so gemeint?
Gibt es sonst noch eine geschickte Art auf Daten zuzugreifen ohne Speicherkopieen zu produzieren?
(26.08.2015 14:29 )GT123 schrieb: Dann müsste ich bei dem Zugriff auf die Daten nach z.b. der DUT Nummer suchen...
Deshalb die ODER-Variante mit den parallelen Arrays. Dort könntest du in deinem ID-Array nach der entsprechenden ID suchen und hättest im Index-Fund gleich den Index für alle anderen Arrays - das wäre bei Clusterarrays schwieriger, da dort der Cluster erst auseinandergenommen werden müsste.
Die eigentlichen Daten kannst du ja auch nach jeder Freigabe löschen. So hast du zwar eine feste Arraygröße mit bekanntem Speichervolumen aber im Datenbereich auch nicht mehr Speicherbedarf als wenn du dein Arrayelement nach jeder Freigabe löschen würdest.
Eine andere Möglichkeit fällt mir so erstmal nicht ein.
Gruß, Marko
26.08.2015, 21:20 (Dieser Beitrag wurde zuletzt bearbeitet: 26.08.2015 21:22 von GerdW.)
Hallo Marko,
ok, ja das klingt logisch das die "parallel-Array" Lösung von der Performance her besser ist. Danke für den Hinweis.
Hallo GerdW,
das mit den Variant-Attributen ist ein guter Hinweis. Habe schon einmal davon gehört aber noch nie angewendet.
Ich würde es nun so umsetzen:
DVR je DUT erstellen, diese DVR dann in ein Variant-Attribut geben, was die Referenz auf meine Daten ist (Input "value" bei "set variant attribute"),
und eine ID z.B. DUT "01" (Input "name" bei "set variant attribute").
Das Variant out gebe ich dann in eine FGV. Somit kann ich von überall aus meinem Programm auf die Daten per DVR und Inplace Structure zugreifen.
Das mit der Datenkapselung muss ich mir noch überlegen, vielleicht in der FGV wieder ein Array in dem ich vermerke ob ich eine DVR entnommen habe um die Daten zu modifizieren.
Dann müssten alle weiteren Zugriffe auf diese DVR, welche ebenfalls die Daten modifizieren möchten, warten bis es wieder freigegeben ist.
Müsste so funktionieren, oder?
Habe ich das mit dem löschen der Variant Attribute richtig verstanden:
wird kein string bei dem Eingang "name" angegeben, so wird der gesamte Inhalt (Array) gelöscht!?
Hallo,
also das mit der Datenkapselung habe ich nun so gelöst, indem ich ein weiteres Array (boolean) in der FGV erstelle welches sich merkt ob die DVR zum modifizieren entnommen wurde oder nicht.
Zu dem Thema Attribut löschen:
Es geht wohl nur so, dass man beim Eingang kein Name anschliessen darf UND auch kein default value.
Schliesst man an default value etwas an, bekommt man kein ARRAY am Ausgang mit allen Atrributen.
In meinem Fall habe ich es so umgesetzt:
- alle Attribute (DVRs) lesen
-dann in DVRs umwandeln
-danach alle DVRs löschen
-danach alle Attirbute löschen
Was denkt ihr, ist das so in Ordnung (anbei ein Screenshot)?
Dann habe ich noch eine essentielle Frage:
Wo sind warden die Daten der DVR im Speicher gehalten?
Wenn ich die DVR in der FGV erstelle, müssten dann nicht auch die Daten in der FGV gespeichert sein?
Mit der FGV halte ich ja sonst nur den Variant im SR.