Showing results 1 to 5 of 5

Thread: Zu viele BulkChanged Events

  1. #1
    Join Date
    10.12.2007
    Posts
    241

    Default Zu viele BulkChanged Events

    Hintergrund:
    In einem Projekt benötige ich beim RT Start (bzw. nach dem Nachladen und auch später dann unregelmässig) die Werte einiger Variablen. Die Wertänderung, also das Changed Event benötige ich aber eigentlich nicht. Jetzt hab ich mir eine leicht geänderte VariableSubscription Klasse (aus github AddIn HowToMaster) erstellt, die intern das Changed Event nutzt und dabei alle Variablen des Containers auf .IsOnline prüft. Wenn alle Variablen Online sind, wird intern der Eventhandler abgemeldet und ein "IsInitialized" Event nach außen geworfen. Dadurch kann ich also z.B. in einer ProjectService Extension beim Start den Onlinecontainer erzeugen und im IsInitialized Eventhandler alle Werte der Variablen auf einmal lesen.
    Jetzt zum eigentliche Grund für diesen Post:

    Nachdem ich die einzelnen Changed Events ja nicht benötige, sondern nur dazu nutze um herauszufinden wann alle Variablen online sind, dachte ich mir dass das BulkChanged Event noch performanter wäre. Im speziellen Fall habe ich z.B. 57 interne Variablen im Container - löst also beim Start bzw. Nachladen (mindestens) 57 Changed Events aus. Mit BulkChanged habe ich erwartet nur noch 1-2 Events zu bekommen. Es bleiben aber immer noch 50 Events. Das stellt für mich natürlich den Sinn dieses Events ziemlich in Frage. Ich mein 57 interne Variablen die in einem Onlinecontainer sind... das kann doch nicht länger als 100ms dauern bis die alle einen Wert haben.
    Ich geb zu das BulkChanged Event bisher noch nie benutzt zu haben, vielleicht ist es in gewissen Anwendungen wo zur Laufzeit sehr viele Wertänderungen auftauchen sinnvoll, aber beim RT Start/Nachladen ist es schon sehr enttäuschend bzw. hab ich waas anderes erwartet. Ist das irgendwie ein Sonderfall?

  2. #2
    Join Date
    28.02.2013
    Posts
    218

    Default Re: Zu viele BulkChanged Events

    Hallo mst,

    wenn die Events ohnehin nicht benötigt werden und die Variablen vom internen Treiber sind, könntest du auch einfach die Eigenschaft "Variable ständig lesen" aktivieren und den Aufwand mit dem OnlineContainer vermeiden.

    Schöne Grüße,
    Felix

  3. #3
    Join Date
    10.12.2007
    Posts
    241

    Default AW: Zu viele BulkChanged Events

    Hallo felix,

    danke für die Antwort. Das Problem ist, dass ich diese Subscription Klasse ganz gern allgemeingültig nutzbar machen möchte. In meinem Fall verwende ich sie in einem Service der mit der Runtime gestartet wird. Ich habe jetzt Tests mit 'ständig lesen' Option durchgeführt und muss feststellen, dass diese Option nicht gewährleistet, dass beim RT Start bzw. Nachladen tatsächlich immer Werte zur Verfügung stehen. Wenn ich also zum Start des Service einige Werte aus Variablen auslesen will hilft mir diese Option nicht. Ich muss also den Start irgendwie verzögern bis alle Variablen Online sind. Da finde ich meine Lösung eigentlich am besten (Alternativen wären irgendwelche Timer und Schleifen mit IsOnline Abfragen, oder das ganze als Wizard zu implementieren der dann zeitverzögert startet usw. - find ich aber unschön für eine Funktion die einfach während der ganzen RT Laufzeit im Hintergrund arbeiten soll).

    Das ganze funktioniert ja auch absolut einwandfrei, ich bin nur in diesem Zusammenhang auf das für mich eigenartige Verhalten des BulkChange Events aufmerksam geworden. Irgendwo dachte ich hab ich mal gelesen, dass in diesem Event die VariableChanges von jeweils 100ms zusammengefasst werden. Das scheint aber nicht zu stimmen. Hab jetzt nochmal getestet und dabei eine interne StopWatch eingebaut: beim RT Start sind es 50 BulkChanges in ca. 700ms, beim Nachladen immerhin noch 19 BulkChanges in ca. 120ms - für einen Onlinecontainer mit 57 Variablen.

    Ich habe da einfach mit wesentlich weniger Events gerechnet. Da sich im aktuellen Fall die Werte zur Laufzeit kaum mehr ändern (und ich die Änderung ja dann auch nicht mehr brauche) kann ich nicht sagen wie sich das tatsächlich während der normalen Laufzeit auswirken würde wenn sich z.B. gleichzeitig alle Variablenwerte ändern würden. Darum dieses ganze Thema und die Frage: ist dieses Verhalten des BulkChange nur durch das RT Starten bzw. Nachladen bedingt, oder ist der ganze BulkChange mehr oder weniger zufällig organisiert?

  4. #4
    Join Date
    28.02.2013
    Posts
    218

    Default Re: AW: Zu viele BulkChanged Events

    Hallo mst,

    das mit den 100ms hatte ich auch irgendwoher im Kopf, das scheint aber nicht (mehr) aktuell zu sein.
    In KB-Eintrag 259200 (https://www.copadata.com/de/support-...t-crashp-2455/) findet sich die Info:

    "Within 1 second a runtime-wise maximum of 50 BulkChange-events are fired before all subsequently incoming values are buffered. These outstanding values than are dispatched together at the end of this 1 second interval."

    Das heißt das definitiv öfter als alle 100ms ein Event gefeuert werden kann.
    Nach welcher internen Logik das Feuern allerdings konkret abläuft, kann ich leider nicht sagen. Auch im Hinblick auf mögliche zukünftige Änderungen im Produktkern.

    Reicht dir diese Antwort aus?

    Schöne Grüße,
    Felix

  5. #5
    Join Date
    10.12.2007
    Posts
    241

    Default AW: Zu viele BulkChanged Events

    Hallo Felix,
    ja danke ist völlig ausreichend. Wie gesagt funktioniert ja sowieso alles, hat mich nur ein wenig verwundert und mich neugierig gemacht.

Similar Threads

  1. I don`t see any events in CEL
    By banpr1 in forum zenon Supervisor
    Replies: 2
    Last Post: 21st October 2019, 11:19
  2. Events in AddinProjectWizardWinforms?
    By hp in forum Add-In Framework
    Replies: 0
    Last Post: 19th December 2017, 10:34
  3. AW: Events im Editor
    By sniggi in forum VBA
    Replies: 9
    Last Post: 17th March 2015, 13:55
  4. Segregation of System events and Process events
    By ansab.tp in forum zenon Supervisor
    Replies: 1
    Last Post: 25th February 2012, 00:54
  5. Events im Editor
    By sniggi in forum zenon Supervisor
    Replies: 1
    Last Post: 20th January 2012, 01:29

Posting Rules

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •