IDE/Standalone Performance Issues - A Light At The End of the Tunnel!
Richard Gaskin
ambassador at fourthworld.com
Thu Nov 11 17:03:07 EST 2010
Peter Haworth wrote:
> Here's a small example section of code which I've changed to use the
> ID where it used to use the long name. The variables are:
>
> myID holds the short ID of the control
> pselection a parameter passed into the command
>
> put the milliseconds into mymilliseconds
> writeDebug "Starting loadOneList" && the abbrev name of control ID myID
> if pselection is empty then
> if "listValues" is among the lines of the customKeys of control
> ID myID then
> put the listValues of control ID myID into tlistspec
> else
> put the text of control ID myID into tdata
> end if
> else
> put pselection into tlistspec
> end if
> if tlistspec is not empty then
> repeat for each line myLine in tlistspec
> writeDebug tab & (the milliseconds - mymilliseconds) & tab &
> "Start processing SELECT" && myline
What's interesting there is that the control is only being referenced
three times: once to write the debug string, a second time to check the
customKeys, and a third time to obtain the prop values.
Given that it's just three object references and most of the work is
done in the repeat look that works on the list, it's hard to believe
those three object references could account for the speed difference by
themselves.
What does writeDebug look like, and what does the other half of the
repeat look like (there's no closing "end repeat")?
And what exactly is in myID? Have you verified that it's an integer,
and that the name was as you expected it in the earlier version?
Also, do you have any getProp handlers in your stack?
Perhaps most importantly: are there any other stacks or libraries used
by the standalone that aren't present in the IDE?
> It is puzzling why your tests don't reflect what Im experiencing.
Yeah, me too. :)
> Maybe it's something to do with the operation that is carried out on
> the control. In my case, most of the addressing of the controls
> consists of getting/setting their properties, both standard and
> custom. Could it have anything to do with the fact that my code is
> executed in a script that is held in a separate code library stack and
> inserted as a front script?
Possibly. It may be helpful to log the frontScripts, the backScripts,
and the stacksInUse in both the IDE and the standalone to see what
differences there may be. Of course you'll see a lot more of those in
the IDE, which should theoretically either have no effect or make it
slower, but perhaps a script is both in a library and a frontScript in
the standalone, causing it to execute more than once.
getProp and setProp handlers can be mystifyingly problematic because I
find that the more of those there are the more all custom property
accesses slow down (though the effect is very minor, a fraction of a
microsecond).
> The only other variable I can think of is
> the location of the debug log I'm writing to. In the IDE, the debug
> log is in the same folder as the stack file but in the standalone it's
> in the users Library/Preferences/<appname> folder. This is running on
> a Mac of course.
That's a noteworthy point. When diagnosing issues like this it's very
useful to eliminate differences between the working and non-working
implementations until you hone in on the root cause.
To verify that this isn't an issue with writing to a different location,
you might consider altering the standalone (at least temporarily, for
this test) so that it writes to the same location as when it's run in
the IDE.
> All I have to do now is find all the places in my code where controls
> are referenced by their long name - oh joy!
Hopefully we'll be able to find a different root cause than the current
apparent one, maybe one that requires less work to remedy. :)
--
Richard Gaskin
Fourth World
LiveCode training and consulting: http://www.fourthworld.com
Webzine for LiveCode developers: http://www.LiveCodeJournal.com
LiveCode Journal blog: http://LiveCodejournal.com/blog.irv
More information about the use-livecode
mailing list