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 

lokale vs. globale vs. fuktionale globale Variablen



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.04.2007, 10:14
Beitrag #1

Thomasschoenau Offline
LVF-Grünschnabel
*


Beiträge: 10
Registriert seit: Feb 2007

8.2, 2010 SP1
2006
EN


Deutschland
lokale vs. globale vs. fuktionale globale Variablen
Hallo,
ich stehe vor einem (für meine Verhältnisse) etwas grösserem Projekt. Es geht darum, ein Programm zu schrieben, was Graphen aus Textdateien läd und einige Tools zur Bearbeitung bereitstellt. Es sollen also Bereiche aus den Graphen editiert werden können (Punkte markieren, verschieben, löschen, ausklingen lassen, etc) und auch mehrere Graphen voneinader abgezogen oder miteinander multipliziert werden können.
Nun stehe ich vor dem Problem, daß ich recht viele Daten speichern muss und keine Lust habe, 10 bis 20 Drähte von einem Shift-Register zum nächsten zu ziehen (und dann auch noch durch alle Event-Cases). Man könnte diese zwar bündeln aber das ist in meinen Augen auch mehr eine Scheinlösung, da ich dann ständig am bündeln und entbündeln bin.

Am elegantesten erscheinen mir dehalb lokale/globale bzw. funktionale globale Variablen.
Allerdings habe ich in mehreren Texten gelesen, daß man, wenn möglich, auf globale Variablen verzichten sollte, weil:
1. schlechter Programmierstil (sehe ich ein)
2. zu langsam, da Kopie von den Daten angelegt wird

Stattdessen werden funktionale globale Variablen empfohlen, weil diese keine Kopien anfertigen.

Ich habe mal ein paar Geschwindigkeitstests gemacht (VI siehe Anhang) und dabei kam folgendes raus:

1.Platz: lokale Variable: 11 .. 12s
2.Platz: funktionale globale Variable: 14s
3.Platz: globale Variable: 17s

was mich hier verwundert, ist daß die lokale Variable schneller ist als die funktionale globale Variable. Ist das normal, oder habe ich was falsch gemacht?

im Anhang:
main lokale Variable.VI --> Testprogramm lokale V.
main functional global.VI --> Testprogramm funktinale globale V.
functional global.VI --> funktinale globale V.


Gibt es noch witere Ideen, die vielen Shift-Register zu vermeiden?

Danke im Voraus
und frohe Restostern!


Angehängte Datei(en)
Sonstige .vi  Main_lokale_Variable.vi (Größe: 87,66 KB / Downloads: 268)

Sonstige .vi  functional_global.vi (Größe: 42,45 KB / Downloads: 267)

Sonstige .vi  Main_functional_global.vi (Größe: 80,88 KB / Downloads: 299)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
09.04.2007, 11:17 (Dieser Beitrag wurde zuletzt bearbeitet: 09.04.2007 11:20 von IchSelbst.)
Beitrag #2

IchSelbst Offline
LVF-Guru
*****


Beiträge: 3.692
Registriert seit: Feb 2005

11, 14, 15, 17, 18
-
DE

97437
Deutschland
lokale vs. globale vs. fuktionale globale Variablen
' schrieb:2. zu langsam, da Kopie von den Daten angelegt wird
Geschwindigkeit ist relativ (wer hat das noch mal gesagt?) Das Arbeiten mit Strings ist wesentlich aufwändiger als eben mal eine neue Datenkopie anlegen. (Wobei ich hier mal keine Aussagen machen will über eine Grenze, die es sehr wohl gibt: Was tun, wenn der Datensatz 1MB groß ist?).

Zitat:was mich hier verwundert, ist daß die lokale Variable schneller ist als die funktionale globale Variable.
Immerhin hat ein SubVI-Aufruf ja selbst einen Overhead. Auch befindet sich ja im SubVI ein Programm, das abgearbeitet werden muss. Eine funktionale Variable ist also prinzipiell langsamer.

Funktionale Variablen haben diverse Vorteile. So kann man in das entsprechende SubVI auch datenspezifischen Code legen und mittels eines Enumarator-Eingangs diverese Operationen ausführen lassen (wenn's die Applikation halt so verlangt). Auch kann man natürlich mehrere Ausgänge aus dem SubVI haben. Eine solche "Funktionale Variable" ist dann im Prinzip auch nichts anderes als eine gekapselte Klasse einer textbasierten Programmiersprache.

Globale Variablen sind zwar schnell und bequem in der Handhabung während der Programmierung, ich würde aber trotzdem im Falle eines Falles zu den funktionalen Variablen raten. Noch besser als funktionale Variablen sind natürlich Schieberegister. In deinem Falle kann man beides verbinden.

Nachtrag:
Oder noch besser: Die Operation in das SubVI auslagern.


Angehängte Datei(en) Thumbnail(s)
   

Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
09.04.2007, 19:09
Beitrag #3

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

Beiträge: 7.699
Registriert seit: Mar 2006

LV 2016-18 prof.
1995
DE

01108
Deutschland
lokale vs. globale vs. fuktionale globale Variablen
' schrieb:Gibt es noch witere Ideen, die vielen Shift-Register zu vermeiden?

Lokale Variablen sollten unbedingt vermieden werden, wenn es sich dabei um große Array- oder Clusterstrukturen innerhalb der zeitkritschen Hauptausführungs-Schleife handelt. Wenn Du das beachtest, oder anders herum gesagt, wenn Du nur in diesem Fall Shiftregister verwendest, ansonsten aber lokale Variablen, dann bleiben von Deinen 10 oder 20 Schiftregisteren vielleicht nur noch 1 oder 2 übrig, ohne daß es zu messbaren Geschwindigkeitsnachteilen kommt. Ansonsten würde ich, wie von Dir schon erwogen, lokale Variablen verwenden.

Die VI-übergreifenden Globalen oder funktionalen globalen Variablen wird man sowieso nur verwenden, wenn Informationen zwischen unterschiedlichen VIs ausgetauscht werden sollen, und wenn das der Fall ist, stehen sie in Konkurrenz zu Queues oder Meldern als die oftmals bessere Alternative.

In Deinem Vergleich fehlt etwas, was am allerschlechtesten wäre: Wert schreiben oder lesen über Eigenschaftsknoten "Wert". Sollte man nur verwenden, wenn der Aufruf eines Eigenschaftsknotens wegen anderer Eigenschaften sowieso notwendig ist, in diesem Fall kann man anstelle der lokalen Variablen die Eigenschaft "Wert" mit verwenden. Sonst aber nicht.

Viele Grüße
Ludwig
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
  Globale Variablen Edi70 7 4.447 08.10.2021 17:01
Letzter Beitrag: GerdW
  Lokale Variablen eliminieren / Signale Zusammenfassen Philipp841 8 5.213 30.09.2019 09:51
Letzter Beitrag: Philipp841
  Boolean als globale Variable ares2013 12 11.333 06.09.2019 13:57
Letzter Beitrag: GerdW
  Wie kann man Lokale Variablen sauber verpacken? Tobzn 10 7.764 04.03.2018 12:02
Letzter Beitrag: IchSelbst
  Lokale Variable galilio 5 4.844 09.02.2017 22:20
Letzter Beitrag: Trinitatis
  Übergabe Anzeigeelement zwischen VIs (Referenz/globale Variable?) lipster 1 4.295 03.02.2017 14:27
Letzter Beitrag: GerdW

Gehe zu: