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 mein programm so langsam?



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!

07.12.2007, 07:43 (Dieser Beitrag wurde zuletzt bearbeitet: 07.12.2007 19:31 von jg.)
Beitrag #1

D3nnis.C Offline
LVF-Gelegenheitsschreiber
**


Beiträge: 66
Registriert seit: Nov 2007

8.2
2007
kA

41748
Deutschland
Warum ist mein programm so langsam?
Hallo,
ich habe untestehendes programm erstellt. In dem Programm soll zu Begin ein "Kalender" erstellt werden der kalender soll von nun an 60 tage weiter zaehlen, das allerdings in minuten, das waeren dann 86400 minuten.

Aus diesen daten will ich dann ein arry erstellen, das geht auch noch relativ schnell.
Als naechstes lese ich daten aus einer txt datei ein und moechte dies mit jedem einzelnen der 86400 felder vergleichen.
Aber dann wird das Programm sehr langsam, kann mir vielleicht jmd sagen was ich falsch mache?

Dennis

(VI LV 8.2)


Angehängte Datei(en)
Sonstige .vi  zulangsam.vi (Größe: 40,18 KB / Downloads: 189)

Sonstige .txt  ton.txt (Größe: 4,69 KB / Downloads: 591)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
07.12.2007, 09:00
Beitrag #2

Lutzi Offline
LVF-Grünschnabel
*


Beiträge: 12
Registriert seit: May 2006

2014
1996
EN

07778
Deutschland
Warum ist mein programm so langsam?
1. Du solltest überprüfen, welche Aktionen aus deinen For Schleifen rausgenommen werden.
Kleines Beispiel:
Für den Vergleich holst Du jedesmal aus deinen Zeiten Array das Elemen index, das muss doch nicht sein, einmal holen zu beginn reicht doch?
2. Die Reservierung von Speicher braucht Zeit. Du solltest besser for Schleifendurchlauf deine Arrays dinensionieren und die entsprechenden Elemente nur austauschen


Angehängte Datei(en) Thumbnail(s)
   
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
07.12.2007, 09:25
Beitrag #3

Y-P Offline
☻ᴥᴥᴥ☻ᴥᴥᴥ☻
LVF-Team

Beiträge: 12.612
Registriert seit: Feb 2006

Developer Suite Core -> LabVIEW 2015 Prof.
2006
EN

71083
Deutschland
Warum ist mein programm so langsam?
Mach' mal 'ne Zeitverzögerung von z.B. 1 ms in Deine For-Schleifen.

Gruß Markus

--------------------------------------------------------------------------
Bitte stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort !!
--------------------------------------------------------------------------
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
07.12.2007, 19:28 (Dieser Beitrag wurde zuletzt bearbeitet: 07.12.2007 19:49 von jg.)
Beitrag #4

jg Offline
CLA & CLED
LVF-Team

Beiträge: 15.864
Registriert seit: Jun 2005

20xx / 8.x
1999
EN

Franken...
Deutschland
Warum ist mein programm so langsam?
' schrieb:Mach' mal 'ne Zeitverzögerung von z.B. 1 ms in Deine For-Schleifen.

Gruß Markus
@Markus: Was soll das denn bringen?

@Dennis: Das meiste hat Lutzi schon gesagt. Ein paar Ergänzungen:
1. GANZ schlecht: Schreiben eines Wertes per PropertyNode->Value, wie du es mit der Variable Index machst. Das Setzen per PropertyNode erzwingt immer ein Update des Frontpanel -> sehr schlechte Performance! An dieser Stelle ist das in deinem VI auch vollkommen unnötig. Einfach den Index von der äußeren Loop in die innere per Verdrahtungstool weiterziehen, fertig.
2. In deiner äußeren Schleife schreibst du immer wieder einen Zwischenvergleich in das Array4. Hier wird zwar nicht unbedingt ein FP-Update erzwungen, aber wahrscheinlich wird es doch recht häufig gemacht. Und dann müssen eine Menge Werte aktualisert werden, kostet auch etwas Zeit.
3. Auch beim Lesen erzeugen PropertyNodes einen großen Overhead, hat also im inneren einer "DoppelLoop" erst recht nichts verloren.
4. Etwas, was man in einer äußeren Schleife machen kann (bei dir das Auslesen Zeitelement) macht man nie in die innere Loop, da man das ja völlig überflüssigerweiser mehrfach macht.

Also merke: PropertyNode->Langsam, großer Overhead!

Hier noch ein paar Schritte zur Verbesserung:
    (besser, aber noch nicht optimal)
    (noch besser)
    (Version mit Autoindexing!)
und zum Schluss noch einfacher:
   

MfG, Jens

P.S.: Bitte in Zukunft beachten.

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!

Einführende Links zu LabVIEW, s. GerdWs Signatur.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
09.12.2007, 09:31
Beitrag #5

D3nnis.C Offline
LVF-Gelegenheitsschreiber
**


Beiträge: 66
Registriert seit: Nov 2007

8.2
2007
kA

41748
Deutschland
Warum ist mein programm so langsam?
Danke erst mal für die Antworten,
@Jens, bei deiner dritten und vieren Lösung werden doch nur die beiden Felder verglichen ob sie gleich sind oder?
Ich muss aber jedes element aus dem zeiten feld mit jedem element aud dem "Kalenderfeld" vergleichen.

Wenn ich die Lösungen 1 und 2 nachbauen will, bekomme ich das auch nicht hin.
Da sobald ich die verbindungen vom Kalender oder Zeiten in die For-schleife ziehe, sind es keine arrys mehr sondern nur noch einfache felder und dann kann ich natürlich kein Index arry mehr machen.
Was mach ich da falsch?
   

Ich weiss für euch sind die Fragen wahrscheinlich blöd, aber ich arbeite erst seit 2 Wochen mit LabVIEW und muss mir alles selber beibringen.
Dennis
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
09.12.2007, 11:43 (Dieser Beitrag wurde zuletzt bearbeitet: 09.12.2007 11:45 von jg.)
Beitrag #6

jg Offline
CLA & CLED
LVF-Team

Beiträge: 15.864
Registriert seit: Jun 2005

20xx / 8.x
1999
EN

Franken...
Deutschland
Warum ist mein programm so langsam?
Hallo, Dennis,

alle Versionen von mir sind vom Ergebnis her vollkommen identisch.

Zu deinem Fehler (und gleichzeitig die Erklärung, wieso V2 & V3 identisch sind):
Es gibt in LV ein Konzept, das sich "Auto-Indexing" nennt. Wenn du ein Array in eine While- oder For-Schleife führst, kannst du entweder das gesamte Array weiterführen (Indexing aus) oder automatisch nur dasjenige Array Element weiterführen, das gerade der dem Index i der Schleifendurchführung entspricht. An- und Abschalten geht über Kontext-Menü:
   
Du sparst dir somit das "Index-Array"-Element, bei FOR-Schleifen kann man sogar bei Auto-Indexing auf den Anschluss einer Zahl an die Anzahl der Schleifendurchführungen N verzichten, das macht LV selber. Somit sind also V2 & V3 identisch.

Übrigens, beim Ausgang an der FOR-Schleife hast du dieses Konzept ja auch schon verwendet.

Jetzt noch zur 4. Variante, ist ebenfalls identisch. Eine ganze Reihe von LV-Funktionen kann auch Arrays oder Cluster miteinander vergleichen, so auch der "="-Operator. Er kann auch ein Array mit einem Element vergleichen, dabei wird automatisch jedes Element des Arrays mit dem Vergleichselement verglichen, Ausgang ist dann ein Array.

Alles paletti?

MfG, 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!

Einführende Links zu LabVIEW, s. GerdWs Signatur.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
09.12.2007, 21:29
Beitrag #7

D3nnis.C Offline
LVF-Gelegenheitsschreiber
**


Beiträge: 66
Registriert seit: Nov 2007

8.2
2007
kA

41748
Deutschland
Warum ist mein programm so langsam?
@Jens,
alles paletti ist anders Rolleyes
aber vielen dank, aber das wirft nun noch eine frage auf. Ich wollte das die vergleich ergebinsse nun nicht in einem 2darry speichern sondern in einem 1d arry.
deshalb habe ich nun auch beim ausgang auf disable index gestellt.
das müste doch dann funktionieren wenn ich das nun richtig verstanden hab oder?
Es funktioniert aber nicht :angry2:
   
Dennis

PS: Woher kannst du das so gut?
Ich will das auch lernen!!!
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
09.12.2007, 23:23
Beitrag #8

jg Offline
CLA & CLED
LVF-Team

Beiträge: 15.864
Registriert seit: Jun 2005

20xx / 8.x
1999
EN

Franken...
Deutschland
Warum ist mein programm so langsam?
' schrieb:@Jens,
alles paletti ist anders Rolleyes
aber vielen dank, aber das wirft nun noch eine frage auf. Ich wollte das die vergleich ergebinsse nun nicht in einem 2darry speichern sondern in einem 1d arry.
Das ist ja jetzt eine ganz neue Info! Wozu eigentlich, durch das 2D-Array hast du doch eine schöne Info, welchen Datenindex du gerade verglichen hast.
' schrieb:deshalb habe ich nun auch beim ausgang auf disable index gestellt.
das müste doch dann funktionieren wenn ich das nun richtig verstanden hab oder?
Es funktioniert aber nicht :angry2:
[attachment=37252:Namenlos.png]
Dennis
Nein, jetzt machst du einem Denkfehler beim Datenflusskonzept von LabVIEW. Wenn du das Autoindex am Ausgang der Schleife auf Disable stellt, führst du nur noch das allerletzte Vergleichsarray weiter und verwirftst alle vorherigen Vergleiche. Wenn du also ein Array aller Vergleiche hintereinander brauchst, dann könntest du z.B. Reshape-Array-Funktion aus der Array-Palette das per Autoindex erzeugte 2D-Array in ein 1D-Array wandeln. Oder du schaust dir mal den Tip von Lutzi (Beitrag #2) an.
' schrieb:PS: Woher kannst du das so gut?
Ich will das auch lernen!!!
Guckst du auf mein Profil, für irgendwas müssen jetzt bald 9 Jahre Erfahrung ja wohl gut sein. Und zwecks Lernen, schau dir die Bsp. an (stickwort NI-Examplefinder), arbeite ein gutes Einführungsbuch durch, oder besuche einen Kurs von NI. Dann hast du nach ein paar Monaten die Basics von LV drauf.

MfG, 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!

Einführende Links zu LabVIEW, s. GerdWs Signatur.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
11.12.2007, 13:56
Beitrag #9

D3nnis.C Offline
LVF-Gelegenheitsschreiber
**


Beiträge: 66
Registriert seit: Nov 2007

8.2
2007
kA

41748
Deutschland
Warum ist mein programm so langsam?
[Das ist ja jetzt eine ganz neue Info! Wozu eigentlich, durch das 2D-Array hast du doch eine schöne Info, welchen Datenindex du gerade verglichen hast.]

Ich will 15 txt files mit einander vergleichen, so das maximal zwei zusammen laufen und das für 2 monate im vorraus, daher die 86400 schritte, das sollen minuten sein. Darum mache ich dann für jede minute im "kalender" die auch in einer meiner zeiten steht, eine 1. Nachher will ich dann die einzelnen 1d arrys mit einander vergleichen. um zu kontrollieren, ob es überschneidungen gibt.
Daher muss ich das jetzt irgendwie in ein 1d arry um formen, mit der Reshape arry funktion kann ich zwar eine dimension löschen, aber dann bekommen ich doch auch nur ein ergebnis und zwar das aus der ersten Spalte.
   

und bei dem beispiel vom Lutzi bekommt man auch ein 2d arry,
Gibt es eine möglichkeit jetzt ganz einfach mit einer funktion oder sowas aus dem 2d ein 1d zumachen in dem aber dann jedes lämpchen brennt, das auch in dem 2d brennt, nur halt neben einander, ohne das ich jetzt erst wieder mit schleifen und so anfang?
Dennis
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
11.12.2007, 16:54
Beitrag #10

jg Offline
CLA & CLED
LVF-Team

Beiträge: 15.864
Registriert seit: Jun 2005

20xx / 8.x
1999
EN

Franken...
Deutschland
Warum ist mein programm so langsam?
Natürlich geht das mit der Reshape Array Funktion:

   

MfG, 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!

Einführende Links zu LabVIEW, s. GerdWs Signatur.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
30
Antwort schreiben 


Möglicherweise verwandte Themen...
Themen Verfasser Antworten Views Letzter Beitrag
  Programm wird Langsam Kernphysik_Jürgen 11 8.287 29.11.2016 14:33
Letzter Beitrag: GerdW
  Warum ertönt ein BING Hasenfuss 3 3.264 07.07.2015 20:20
Letzter Beitrag: jg
  Case wird wiederholt --> weiß nicht warum mexas450 9 6.518 12.12.2014 13:35
Letzter Beitrag: Lucki
  Warum Tiefpass-Filter um 50 Hz Netzstörung zu "entfernen" zig 14 17.034 18.08.2014 08:00
Letzter Beitrag: zig
  LabView stürtz bei Programm start ab, weiß nicht warum ? Stadi 5 5.174 03.05.2014 18:21
Letzter Beitrag: Trinitatis
  First Call? Funktion vs wann gibt mein Case false aus? anne 11 10.052 24.01.2014 08:34
Letzter Beitrag: GerdW

Gehe zu: