Hello guys, We're seeing some strange behaviour when doing cross-thread invoking in Resolver. Unfortunately, we can't get a minimal repro for this, so I'll just describe what's going on and hopefully something will be obvious.
We do our recalcs in a background thread, to avoid blocking the GUI. When a recalc finishes, it has to update the UI with the results of the calculations. We do that with: form.Invoke(self._synchroniseUI.Target, self, startedTime, aborted, state) where 'form' is our main form, 'self' is a Document instance that holds the sub-engine and all the results, `startedTime` is a DateTime, `aborted` is a ManualResetEvent, and `state` is an object with some state extracted from the recalculations. We have instrumented the execution of this, and we find this weird pattern: While _synchroniseUI takes say 500ms, form.Invoke takes 5000ms, but only the first time it's called. Subsequent updates behave normally. Our guess would be that some kind of overhead is created lazily once, and comes for free after that, but it's hard to see what's going on. We've tried the same Invoke call with CallTarget0 and a lambda with the arguments and with CallTarget5 with the same results. Is there something potentially expensive that involves CallTargets and cross-thread invocations? This was fine in IronPython 1.1. Thanks Glenn & Orestis
_______________________________________________ Users mailing list Users@lists.ironpython.com http://lists.ironpython.com/listinfo.cgi/users-ironpython.com