I have a stack that has five cards and each card holds sixty groups each comprises two buttons and a field. I have a helper routine that deletes all these groups and replaces them with copies of a master group held on a sixth card. I call the helper routine from the message box and the update routine runs without error. However, Livecode takes a very long time to hand back control to the IDE and my computer's fans start running during this time. Apple's activity monitor show that Livecode is using 90% cpu during this period.
My guess is that Livecode is taking time to process the deletion and addition of three hundred groups which are some twelve hundred items. Any thoughts ? My handler is below.
On IDEUpdateControlsOnTagCards
# Called from the message box when adding new cards
# Used to update the card with an updated control where
# the updated control is DZ-1 held on the ref card
# Used when designing the application not when running
lock screen
Repeat with tcardNo = 1 to 5
put "TagList" & tcardNo into tCardName
put 0 into tCounter
put the the number of groups in card tCardName of me into tTotalGroupCount
repeat with i = tTotalGroupCount down to 1
Delete group i of card tCardName of me
end repeat
put 0 onto tRowNo
put 0 into tColumn
repeat with n = 1 to 60
if n = 1 then
put 1 into tColumn
put 30 onto tLeft
put 0 into tRowNo
else
Switch n
Case 16
add 300 to tLeft
put 0 into tRowNo
break
Case 31
add 300 to tLeft
put 0 into tRowNo
break
Case 46
add 300 to tLeft
put 0 into tRowNo
break
Case 61
add 300 to tLeft
put 0 into tRowNo
break
end Switch
end if
add 1 to tRowNo
put 5 + (tRowNo*46) into tTop -- tRow is the remainder
copy group "DZ-1" of card RefData of me to card tCardName of me
set the name of it to "DZ-" & n
set the left of it to tLeft
set the top of it to tTop
end repeat
Put "1star" into field "tags" of group "DZ-1" of card tCardName of me
Put "2star" into field "tags" of group "DZ-2" of card tCardName of me
Put "3star" into field "tags" of group "DZ-3" of card tCardName of me
Put "4star" into field "tags" of group "DZ-4" of card tCardName of me
Put "5star" into field "tags" of group "DZ-5" of card tCardName of me
Put "Selected" into field "tags" of group "DZ-6" of card tCardName of me
Put "Rejected" into field "tags" of group "DZ-7" of card tCardName of me
Put "Portrait" into field "tags" of group "DZ-8" of card tCardName of me
Put "Model" into field "tags" of group "DZ-9" of card tCardName of me
Put "Landscape" into field "tags" of group "DZ-10" of card tCardName of me
Put "Street" into field "tags" of group "DZ-11" of card tCardName of me
Put "Natural-History" into field "tags" of group "DZ-12" of card tCardName of me
Put "Macro" into field "tags" of group "DZ-13" of card tCardName of me
Put "Print" into field "tags" of group "DZ-14" of card tCardName of me
wait 1 seconds with messages
end Repeat
unlock screen
answer "Complete, all " & tcardNo && "cards have been updated with master control."
end IDEUpdateControlsOnTagCards
First question is whether you have the Project Browser open at the time?
I believe the PB refreshes in its entirety for each and every single edit made, so it will redraw over and over again as it maps all 1200 objects to the tree.
If the Project Browser is already closed, then that's another issue.
Yes I had the project browser open and it seems to be the cause of the delay in handing back control to the IDE. I'll add some lines to close the browser before the main body of the code runs.
Simon Knight wrote: Fri Sep 24, 2021 10:13 am
Yes I had the project browser open and it seems to be the cause of the delay in handing back control to the IDE. I'll add some lines to close the browser before the main body of the code runs.
I would be interested in the results of additionally to closing the Project Browser addding lock messages/unlock messages
It is tricky to measure as it is not clear exactly when full control is handed back to the IDE as the IDE allows edits but the "Apply" button fails to go active. I tried lock messages with the browser open and closed and the significant difference was with the project browser closed. However I will have another look.
I can see you've added 'wait 1 seconds with messages' at the end of the outer loop.
Does it make a difference if you add this (or even 'wait 0 milliseconds with messages') to the start of the inner loop? (or both loops?)
I added some start end timers and also used my computers clock and ran the handler several times. The timers reported to the message box with a put statement. Here are the results :
Project Browser CLOSED.
Run (1) with messages: 8.911 seconds.
Run (2) without messages 5.126 seconds.
In all runs the reported times "felt" correct against the computer clock and the IDE was back in full control.
Project Browser OPEN.
Run (3) with messages 9.664 seconds reported but the it took at least 78 seconds to post the incorrect time in the message box. This was repeatable.
Run (4) without messages 5.123 seconds - again "felt" correct when compared with computers clock.
I've seen similar when I've played with datagrids, its as if the massage path gets lost in the woods and is very hard to debug.
Thank you for testing.
I did not look very close at the code but Sparkout has a very good point regarding wait 1 seconds with messages.
Kind regards
Bernd
Simon Knight wrote: Fri Sep 24, 2021 12:46 pm
Project Browser Open:
...
...
Wait 0 ms with messages - False, line commented out.
With Lock Messages - True
Handler reports 0.092 seconds to quick to measure on stopwatch
Thanks for posting the test results.
That sounds like a nice speed increase.