Hallo Community,
in einem von mir betreuten Zenon-Addin, genauer IProjectServiceExtension, werden von einem Thread, der nicht der Zenon-Hauptthread ist, einige hundert IVariable.SetValue(...)-Aufrufe auf ebenso vielen Variablen durchgeführt. Weil solche Aufrufe von .NET automatisch auf den Zenon-Hauptthread umgelenkt werden, gibt es dort erheblichen Overhead. Diesen würde ich gerne entfernen, um die Performance zu verbessern. Dazu sehe ich folgende Möglichkeiten:
1) Wenn es eine Möglichkeit gäbe, das Setzen der Variablenwerte in einem Zuge abzuwickeln (z.B. SetValues(...)), würde der Synchronisationsaufwand von .NET nur einmalig erfolgen.
-> Gibt es so eine Möglichkeit?
2) Wenn es möglich wäre, den Block, der die vielen IVariable.SetValue(...) aufruft, durch eine Art Dispatch-Vorgang (vgl. z.B. System.Windows.Threading.Dispatcher von .NET) auf den Zenon-Hauptthread zu verlagern, könnte der Synchronisationsaufwand von .NET ebenfalls nur einmal erfolgen. Könnte ich mir in der Start()-Methode des Addins den System.Windows.Threading.Dispatcher.CurrentDispatcher abrufen, um damit den Dispatcher des Zenon-Haupthreads zu erhalten?
-> Funktioniert das? Oder erhält man dann einen anderen Thread?
Wenn das nicht funktioniert (ich habe es noch nicht in der Praxis probieren können), welche Möglichkeiten existieren sonst noch, um die Zenon-API-Aufrufe von anderem Thread effizienter zu gestalten?
Viele Grüße,
Mathias