Unerwarteter Performance-Einbruch
Ich bin auf der Suche nach einer Erklärung für ein mir nicht plausibles Verhalten.
Ich habe 6 Instanzen eines reentranten VI's. Diese VI's führen alle kontinuierlich Berechnungen aus und senden alle pro Durchlauf ihr Ergebnis über ein Melder-SubVI an den ein und den gleichen Empfänger.
Das Melder-VI hat einen FGV-charackter und ist deshalb nicht reentrant.
Mein Gedanke war nun folgender: Da 6 "parallele" Schleifen ein und das selbe VI aufrufen, habe ich hier vermutlich eine Art Flaschenhals.
Also mache ich diese VI doch reentrant, rufe es aber in den einzelnen Instanzen per "Call by Reference" auf um den FGV-charackter für die einzelnen Instanzen beizubehalten.
Erwartet hätte ich nun alles von einer leichten Verbesserung der Performance bis zu einer leichten Verschlechterung. Aber ...
Ergebnis: Bei einer Testsequenz, die verteilt auf die 6 VI's ,1200 mal eine simple Berechnung ausführt und das Ergebnis zurücksendet, habe ich mich von ca. 10s in der alten Version auf ca 55s in der neuen Version verschlechtert.
(Die Initialisierungs-Phase ist in dieser Testsequenz nicht inbegriffen, d.h. die einzige Änderung ist der unterschiedliche Aufruf des Melder-VI's)
|