Speed problems when cloning a group lots of times
Ian Wood
revlist at azurevision.co.uk
Mon Jul 7 09:21:56 EDT 2008
OS X 10.5.2
Rev Studio 2.9.0 Build 610
As part of a geotagging app, I need to generate scrolling lists of GPS
coordinates, other info and 'reveal in Google Earth' buttons.
Potentially the user will do this for thousands of images at once,
although 50-300 at a time will be more likely.
I figured the easiest way to do this would be to copy a group
containing one lines-worth of controls and then paste it lots of
times. Unfortunately the amount of time it takes to paste is
increasing as the repeat loop goes on, AND Rev is then unresponsive
for several seconds for larger (300+) numbers of lines.
100 lines = 800ms plus 1s freeze
200 lines = 3s plus 3s freeze
400 lines = 10s plus 19s freeze
In a standalone, speed increases to about 1 millisecond per line and
the unresponsiveness goes, but go above ~500 lines and it suddenly
starts slowing down again:
100 lines = 50ms
200 lines = 120ms
400 lines = 480ms
500 lines = 870ms
600 lines = 1.5s
700 lines = 2.6s
1000 lines = 8s
Any ideas, or alternative approaches? Cloning the original group makes
no difference to speed, and adds in all sorts of problems with 'last
group' not giving the expected result.
Here's the code:
on mouseUp
put the milliseconds into tt
put text of fld "number" into tNum
lock screen
if there is a grp "list scroller" then delete grp "list scroller"
put 50 into tTop
put 8 into tGap
put 1 into tCount
copy grp "list master"
repeat tNum times
set the cursor to busy
paste
put long id of last grp into tGrp
set name of last grp to ("version" && tCount)
set top of last grp to tTop + tGap
set visible of last grp to true
add height of last grp to tTop
add 1 to tcount
put tGrp & return after tGrpList
end repeat
delete last char of tGrpList
put "group " into tComm
repeat for each line tgrp in tGrpList
put tGrp && "and " after tComm
end repeat
delete last word of tComm
do tComm -- most reliable way of grouping the new groups
put long id of second grp into tGrp
select empty
set name of tgrp to "list scroller"
set height of tGrp to 300
set top of tGrp to 100
set width of tgrp to 16 + formattedwidth of tGrp
set the vscrollbar of tgrp to true
answer the milliseconds - tt
end mouseUp
Ian
More information about the use-livecode
mailing list