Speed up a slow loop

Pi Digital sean at pidigital.co.uk
Thu Mar 3 08:35:54 EST 2022


I usually test this by using

put the milliseconds into tMs
…loop code…
put the milliseconds - tMs

This shows me a record of how long that loop took and helps me narrow down where the slow downs are occurring. You can do it within the loop too and keep a record for each iteration and see if it has a problem as it gets further down the list. But not likely with arrays. 

Sean Cole
Pi Digital Productions Ltd

eMail Ts & Cs


> On 3 Mar 2022, at 06:53, Mark Waddingham via use-livecode <use-livecode at lists.runrev.com> wrote:
> 
> On 2022-03-02 21:57, J. Landman Gay via use-livecode wrote:
>> The loop takes forever. Here it is (sDictFile is a script local):
>>  repeat for each line l in pList -- pList is the user word list
>>    if sDictFile[l] = true then put l & cr after tCheckedList
>>    else put l & cr after tNonWords
>>    wait 0 with messages  -- prevent ANRs
>>  end repeat
>> I added the wait because my Android phone was putting up an "app not
>> responding" warning while the loop was running (or just after, hard to
>> tell.) The loop should be much faster than that. When I added some
>> timing checks though, the timer says the loop takes between 0 and 1
>> millisecond, and yet the wait on screen remains.
> 
> If the difference between `the milliseconds` before the loop, and then after is 0 or 1 millisecond - then that is how long it is taking. This means the issue is somewhere else. Are you sure there isn't anything you are doing either before that loop or after that loop which doesn't wait for ages (due to the ANRs you mentioned).
> 
>> With a 3-word user list, the loop takes 4 seconds. With an 8 word user
>> list the loop takes 6 seconds. The more user words, the longer the
>> wait.
> 
> If there are only 3 reasonable length words in pList (I.e. 3 lines) then there's no way that loop can take 4 seconds. Of course if the words are multiple megabytes long then it might be possible (however the timing you already stated above suggests the loop isn't actually taking 4 seconds!).
> 
>> Even stranger: on my cheapo Android tablet with 4 megs of RAM running
>> Android 9 the response is nearly instantaneous, even if the user list
>> has 200+ words. On my Pixel phone with 8 megs of RAM and Android 12
>> the response is slow enough to trigger the ANR with only 3 words. I'm
>> building for ARM 64.
> 
> This strongly suggests it is something else either on your phone, or in your code which your phone doesn't like I think.
> 
> Warmst Regards,
> 
> Mark.
> 
> -- 
> Mark Waddingham ~ mark at livecode.com ~ http://www.livecode.com/
> LiveCode: Everyone can create apps
> 
> _______________________________________________
> use-livecode mailing list
> use-livecode at lists.runrev.com
> Please visit this url to subscribe, unsubscribe and manage your subscription preferences:
> http://lists.runrev.com/mailman/listinfo/use-livecode


More information about the use-livecode mailing list