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!
24.12.2012, 00:58 (Dieser Beitrag wurde zuletzt bearbeitet: 24.12.2012 01:00 von blubblub.)
ich wollte mal austesten, wie lange es dauert ein Diagramm Punktweise zu füllen und zwar
direkt, über Eigenschaftsknoten, lokale Variablen und globale Variablen.
Dazu erzeuge ich zunächst ein Array und dann lese ich das Array Punktweise in die Diagramme ein.
Was mich etwas verwundert ist, dass die Diagramme, die direkt, über lokale Variablen und globale Variablen
gefüllt werden, selbst bei 100.000 Werten nur einen Bruchteil einer Sekunde benötigen,
während es über den Eigenschaftsknoten Minuten dauert.
Habe ich irgendwo im Programm einen Fehler gemacht?
Ich hab zwar schon gehört das Eigenschaftsknoten langsam sind, aber gleich so langsam??
Zudem wundert es mich, dass 100.000 Werte nahezu sofort bei den anderen drei Varianten gezeichnet werden,
so als wären es Graphen und nicht Diagramme.
24.12.2012, 09:06 (Dieser Beitrag wurde zuletzt bearbeitet: 24.12.2012 09:21 von Lucki.)
Ich hatte auch mal die Unterschiede zwischen direkten V., lokalen V., globalen Variablen und Eigenschaftsknoten untersucht. Deine Ergebnisse einigermaßen kompatibel mit meinen: Der Zugriff auf lokale Variablen dauerte kaum länger als der direkte Zugriff, der Zugriff auf eine globale Variable dauert unwesentlich länger, hingegen dauerte der Zugriff über den Eigenschaftsknoten "Wert" etwa 200 mal länger. Bei Dir ist es allerdings noch viele länger, das ist schon arg, aber die Messmethode ist korrekt. Da kann man nur einmal mehr sagen: Finger weg vom Daueraufruf von Eigenschaftsknoten in zeitkritischen Schleifen.
Dass ein Diagramm so schnell beschrieben wird,liegt an der in LV überall eingebauten Intelligenz. Wenn Du also denkst, die Update-Geschwindigkeit müsste durch das relativ langsame Zeichnen der Graphik ausgebremst werden, dann unterschätzt eben diese Intelligenz. Das Lesen der Daten und die graphische Darstellung derselben sind unterschiedliche interne Tasks mit unterschiedlicher Priorität. Und wenn die Updaterate der Daten höher ist als die mögliche Updaterate der eigentlichen Graphik, dann werden pro Graphik-Update nicht ein, sondern entsprechend viele Plotpunkte upgedatet. (Im Laufe der Jahre ist LV immer schneller geworden. Es kann sein, dass das bei älteren Versionen von LV noch nicht so schön funktioniert hat wie jetzt)
Ja, Eigenschaftsknoten sind langsam, denn:
- Sie laufen auf jeden Fall im UI-Thread.
- jedes Setzen einer Eigenschaft oder des Werts erzwingt (!) ein Frontpanel-Update.
Bei Setzen per Terminal oder per lokaler Variable wird ein FP-Update nicht zwingend durchgeführt, deshalb geht es da recht flott.
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!
Ich komme noch nicht so ganz mit den Begriff User Interface Thread zurecht.
Soweit ich es verstehe gibt es zwei Arten von Threads. Die Kernel Threads und die User Threads.
Wenn in diesem Forum von User Interface Threads gesprochen wird, ist das ein synonymer Begriff zu User Threads?
Nun wird hier oft geschrieben, dass Diagramme im User Interface Thread gezeichnet werden.
Was wird denn alles im User Interface Thread bzw. User Thread abgearbeitet.
Und was wird nicht in einem solchen Thread abgearbeitet?
Wird alles was nicht im User Interace Thread abgearbeitet wird, im Kernel Thread abgearbeitet?
Warum ist das so schlecht, dass Diagramme im User Interface Thread abgearbeitet werden?
Und wenn das so schlecht ist, warum werden Diagramme nicht im Kernel Thread abgearbeitet?
24.12.2012, 12:17 (Dieser Beitrag wurde zuletzt bearbeitet: 24.12.2012 12:20 von GerdW.)
du darfst hier nicht LabVIEW-interne und OS-TasksThreads durcheinander schmeißen! LabVIEW selbst ist multi-threaded, was erst mal nichts mit den Aufgaben des OS zu tun hat...
LabVIEW selbst teilt seine Aufgaben "internen" Threads zu, einer davon übernimmt alle Aufgaben, die das UI (Zeichnen etc.) betreffen: dieser spezielle Thread ist der User Interface Thread. Da alle Aufgaben, die dieser Thread übernimmt, gern mal einen Thread-Wechsel erfordern (z.B. Schreiben einer PropertyNode), erhälst du immer eine Speed-Penalty. Außerdem kann es vorkommen, das dieser Thread Aufgaben (langsam) nacheinander abarbeitet, wenn er mal überlastet sein sollte, was sich in unschönen Verzögerungen deines UI äußern kann.
P.S.: Dein Vergleich von "direkt" und "globale Variable" ist im Grunde identisch. Beim Zeichnen des Diagramms ist es unerheblich, wo die Daten herkommen. Der eine Lese-Zugriff auf die globale Variable spielt da kaum eine Rolle...
-------------------------------------------------------------------------- Bitte stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort !!
--------------------------------------------------------------------------
24.12.2012, 14:49 (Dieser Beitrag wurde zuletzt bearbeitet: 24.12.2012 14:56 von blubblub.)
Der Kurs wäre sicher interessant und genau das richtige für mich, aber die Preise sind für mich viel zu hoch.
Ich muss mal schauen, ob ich im Internet irgendwelche Erläuterungen dazu finde.
Wie sieht es mit dem Schreiben von Daten in einer Datei aus?
Ist das ebenfalls Zeitintensiv? Das wird vermutlich aber nicht vom User Interface Thread abgearbeitet, oder?