I had some major performance issues recently on one project.
I’ve worked with loads of xll related tools and they all have their strengths and weaknesses. And I think they all do something that none of the others do. And having worked with the raw API (I also built my own xll generator) I love any tool that hides any of that Excel4 hell hole.
Anyway we had a UDF lock up issue, with a slow calculating function, so the usual solution is to move to asynchronous.
To convert a slow single threaded locking synchronous function to asynchronous multi-threaded joy using XLL+ is just a couple of clicks. And it requires zero understanding of the plumbing underneath.
Of course before you fire off a few thousand calls per millisecond to your server infrastructure, its probably worth checking it can cope…;-) (although it seems if you don’t check, someone will let you know as soon as they have checked the logs to find out why it crashed) (Tip: always test under someone elses login)
ExcelDNA also does async, but I would have needed to code up my own RTD server, not hard, but not a fast as clickety click on the XLL+ function wizard.
At the Excel dev conf recently I demonstrated creating an RTD function in Add-in Express which is very simple too.
So asynchronousness is covered by many of the tools, and it is integral in Excel 2010 (although I have not had chance to investigate just how ‘integral’).
We had another issue too, also solved with a couple of clicks of XLL+, that I have not seen addressed in any of the other xll tools. Namely: when you have volatile arguments to an RTD server you get in a race condition because the RTD update triggers a recalc which updates the volatile function which triggers the RTD function, which.. guess what? triggers another calc when it returns. I’ll write more about this in a future post, but just to say if you are struggling to resolve this take a look at xll+.
Anyone else messing with asychronicity?