AW: Selected Line Only

Rudolf Bargholz rudolf at bargholz.ch
Mon Jul 11 15:05:31 UTC 2022


Hi Rob,

I did my tests more than 10 years ago and have no idea where they are now as well 😊 As soon as I sent the mail I thought this would come up.

Regards

Rudolf Bargholz

-----Ursprüngliche Nachricht-----
Von: omnisdev-en <omnisdev-en-bounces at lists.omnis-dev.com> Im Auftrag von Rob Mostyn
Gesendet: Montag, 11. Juli 2022 15:55
An: OmnisDev List - English <omnisdev-en at lists.omnis-dev.com>
Betreff: Re: Selected Line Only

We did the benchmark about 5 years ago Rudolf.
I probably recorded the results somewhere but I wouldn’t know where to look for it now.

The “empty loop” involved a list of 10,000 rows (it might have been 100k)  I think and the loop simply had calculate inInteger as inInteger+1

The difference between the For loop and $Loop() was significant.  $Loop was much slower but the whole iteration took about 10 or 20 seconds or something.  $Loop looked b-a-d .  I don’t remember the actual figures.

But as soon as I put some work in the loop (more than incrementing an integer) everything changed.

I see I am going to have to re-create this benchmark now!   :-)

I’ll get back to you  in a few days.
Rob


> On 11 Jul 2022, at 14:51, Rudolf Bargholz <rudolf at bargholz.ch> wrote:
> 
> Hi Rob,
> 
> Have you tested using a normal FOR loop compared to using $fist()and $next(). I did a comparison many years ago in our Studio 4.3, and the FOR loop was a faster than the $first() and $next(). I actually found that "For each line in list" with a "Set current list" was the fastest option when looping. It is ugly to look at, from my perspective now, but I do use this old structure when I must eek out the last bit of performance from Omnis Studio.
> 
> Regards
> 
> Rudolf Bargholz
> 
> -----Ursprüngliche Nachricht-----
> Von: omnisdev-en <omnisdev-en-bounces at lists.omnis-dev.com> Im Auftrag 
> von Rob Mostyn
> Gesendet: Montag, 11. Juli 2022 12:46
> An: OmnisDev List - English <omnisdev-en at lists.omnis-dev.com>
> Betreff: Re: Selected Line Only
> 
> We have done some benchmarking on this and the simple conclusion is this:
> 
> If you have nothing happening in the loop then the CPU used to process $Loop() is more expensive than using For loop.
> 
> But I have never written a loop that does nothing inside it, so this is a rather silly indicator of performance.
> 
> As soon as you put work inside the loop then its the work being done that determines the CPU used and the overhead of $Loop() is negligible.  Really... next to nothing!  The difference processing 500,000 records would be something like 500 seconds compared to less than 501 seconds.  Your users will not notice it.
> 
> Advantages for me:
> a.	The code is much easier to read.
> b.	There are fewer keystrokes to define the loop.
> c.	Looping through selected lines only is very easy with fewer keystrokes still
> 
> Rob
> 
>> On 11 Jul 2022, at 11:18, Martin Obongita via omnisdev-en <omnisdev-en at lists.omnis-dev.com> wrote:
>> 
>> Hi Rob,
>> Won't the while$loop be slower than a FOR loop, assuming you have 500,000 transactions?
>> Martin.
>>   On Monday, July 11, 2022 at 11:46:36 AM GMT+3, Rob Mostyn <mostyn at platformis.net> wrote:
>> 
>> And here is another take on this issue:
>> 
>> We have a method/function in our startup_task (and copied into the superclass for remote_tasks) called $Loop.
>> 
>> When running our code you will frequently see this:
>> Calculate ilDisplay.$line as 0
>> While $Loop(ilDisplay)
>>    # do whatever
>> End while
>> 
>> for selected lines only it would look like this:
>> When running our code you will frequently see this:
>> Calculate ilDisplay.$line as 0
>> While $Loop(ilDisplay,kTrue)
>>    # do whatever
>> End while
>> 
>> 
>> 
>> Here is the contents of $Loop:
>> param1:  pList (field reference)
>> param2: pSelectedOnly (boolean, default kFalse)
>> 
>> If pList.$line=0
>> Do pList.$first(pSelectedOnly)
>> Else
>> Do pList.$next(pList.[pList.$line],pSelectedOnly)
>> End If
>> Quit method pList.$line
>> 
>> 
>> Regards,
>> Rob
>> 
>> 
>>> On 11 Jul 2022, at 06:45, Rudolf Bargholz <rudolf at bargholz.ch> wrote:
>>> 
>>> Hi Martin,
>>> 
>>> Calculate lLineCount as List.$linecount For List.$line from 1 to 
>>> lLinecount step 1  If List.0.$selected
>>>    ... Do stuff on the selected lines  End If Enf For
>>> 
>>> If you are in an object class, in an instance, then the following can also work:
>>> 
>>> Do List.$sendall($cinst.$processLine($sendallref),$ref.$selected)
>>> 
>>> For each selected line the method $processLine is called with the List as a field reference parameter with the appropriate selected line set as current.
>>> 
>>> Regards
>>> 
>>> Rudolf Bargholz
>>> 
>>> -----Ursprüngliche Nachricht-----
>>> Von: omnisdev-en <omnisdev-en-bounces at lists.omnis-dev.com> Im 
>>> Auftrag von Martin Obongita via omnisdev-en
>>> Gesendet: Sonntag, 10. Juli 2022 22:21
>>> An: omnisdev-en at lists.omnis-dev.com
>>> Cc: Martin Obongita <martin.obongita at yahoo.com>
>>> Betreff: Selected Line Only
>>> 
>>> Hi Friends, What is the syntax for "Selected lines only" in the FOR loop statement, For each line in list from 1 to iDataList step 1?
>>> 
>>> _____________________________________________________________
>>> Manage your list subscriptions at https://lists.omnis-dev.com Start 
>>> a new message -> mailto:omnisdev-en at lists.omnis-dev.com
>>> _____________________________________________________________
>>> Manage your list subscriptions at https://lists.omnis-dev.com Start 
>>> a new message -> mailto:omnisdev-en at lists.omnis-dev.com
>> 
>> _____________________________________________________________
>> Manage your list subscriptions at https://lists.omnis-dev.com Start a 
>> new message -> mailto:omnisdev-en at lists.omnis-dev.com
>> 
>> _____________________________________________________________
>> Manage your list subscriptions at https://lists.omnis-dev.com Start a 
>> new message -> mailto:omnisdev-en at lists.omnis-dev.com
> 
> _____________________________________________________________
> Manage your list subscriptions at https://lists.omnis-dev.com Start a 
> new message -> mailto:omnisdev-en at lists.omnis-dev.com



More information about the omnisdev-en mailing list