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 

warum ist die Globale Variable schneller?



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.03.2011, 18:12
Beitrag #24

IchSelbst Offline
LVF-Guru
*****


Beiträge: 3.704
Registriert seit: Feb 2005

11, 14, 15, 17, 18
-
DE

97437
Deutschland
RE: warum ist die Globale Variable schneller?
Spielerei:

Ist der String im Cluster leer, dauer die ganze Sache mit der lokalen Variablen 10ms. Steht ein einziges Zeichen im String, dauert die Sache plötzlich 20ms. Genau so lange dauern auch 4 Zeichen im String. 32 Zeichen dauern ungefähr 25ms.

Wo kommt der Sprung von 10ms auf 20ms her?

Ich tippe auf folgendes:
Beim Auslesen der Lokalen Variablen wird für das komplette Array neuer Speicher angefordert. In diesen Speicher wird das Array kopiert. Beachte: Wenn der String leer ist, steht im Cluster für den String ein Null-Pointer. Ob LV das genau so macht, weis ich natürlich nicht. Es ist aber extrem sinnvoll: Null-Pointer bedürfen nämlich keiner weiteren Operation.
Steht im String ein einzelnes Zeichen, so muss für den String, der jetzt nicht mehr leer ist, zusätzlich ein Speicher angefordert werden (das haben Strings so an sich). In diesen Speicher wird dann der Stringinhalt (also die Daten) kopiert. Und dieses Speicher-Anfordern alleine dauert die 10ms. Und da ist noch nix mit Daten kopieren dabei.
Das kopieren der 32 Zeichen summiert sich dann halt auf 5 zusätzliche Millisekunden.

Was will ich jetzt damit sagen? Zwei Sachen:

Je komplizierter der Cluster um so aufwändiger die Speicherbereitstellung und das kopieren.

Viel wichtiger hier ist aber folgendes:
Bei Verwendung einer lokalen Variablen müssen die Daten kopiert werden. Einen Pointer auf die Daten in der Lokalen Variablen zu verwenden geht nicht. Es besteht nämlich die Möglichkeit, dass ein paralleler Prozess auch auf die Daten der Lokalen Variablen zugreifen will. Ein zweifacher Pointer-Zugriff aber ist tödlich.
Verwendet man eine Queue, sieht die Sache ganz anders aus: Beim Auslesen der Queue muss man keine Daten kopieren! Da kann man den Bereich nehmen, der bereits vorhanden ist: Es gibt nichts in irgendwelchen parallelen Prozessen, das auch auf die Daten in der Queue zugreifen kann: einmal ausgelesen, sind die Daten nicht mehr "da". Warum also kopieren?


Hinweis:
Ob LV das auch genau so macht, wie ich es mir vorstelle, weis ich nicht. Da gibt es andere. Es spricht nur sehr, sehr viel dafür.


Angehängte Datei(en)
2010 .vi  speedtest2_fixed_filled_string.vi (Größe: 20,03 KB / Downloads: 168)

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
Antwort schreiben 


Nachrichten in diesem Thema
RE: warum ist die Globale Variable schneller? - IchSelbst - 09.03.2011 18:12

Möglicherweise verwandte Themen...
Themen Verfasser Antworten Views Letzter Beitrag
  Globale Variablen Edi70 7 5.957 08.10.2021 17:01
Letzter Beitrag: GerdW
  Boolean als globale Variable ares2013 12 12.919 06.09.2019 13:57
Letzter Beitrag: GerdW
  Übergabe Anzeigeelement zwischen VIs (Referenz/globale Variable?) lipster 1 4.779 03.02.2017 14:27
Letzter Beitrag: GerdW
  Warum ertönt ein BING Hasenfuss 3 3.799 07.07.2015 20:20
Letzter Beitrag: jg
  Frage zur Compilierung, ist .EXE schneller als Start vom Frontpanel? Hasenfuss 1 3.296 30.06.2015 14:51
Letzter Beitrag: jg
  globale Konstanten? Nordvestlys 6 6.557 20.02.2015 09:35
Letzter Beitrag: Nordvestlys

Gehe zu: