Mailing Lists: Apple Mailing Lists

Image of Mac OS face in stamp
 
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Fastest Method to Append to a List



Thanks for the pointers, Andreas and Paul. Constructing and accessing my lists is now a lot faster! I ran a number of time tests using the global/my "Nigel" method together with various code constructs, and found significant speed increases almost everywhere, for example:
<x-tad-smaller>
</x-tad-smaller><x-tad-smaller>set</x-tad-smaller><x-tad-smaller> </x-tad-smaller><x-tad-smaller>t1</x-tad-smaller><x-tad-smaller> </x-tad-smaller><x-tad-smaller>to</x-tad-smaller><x-tad-smaller> </x-tad-smaller><x-tad-smaller>the</x-tad-smaller><x-tad-smaller> </x-tad-smaller><x-tad-smaller>MP Ticks</x-tad-smaller><x-tad-smaller>
</x-tad-smaller><x-tad-smaller>repeat</x-tad-smaller><x-tad-smaller> </x-tad-smaller><x-tad-smaller>with</x-tad-smaller><x-tad-smaller> </x-tad-smaller><x-tad-smaller>n</x-tad-smaller><x-tad-smaller> </x-tad-smaller><x-tad-smaller>in</x-tad-smaller><x-tad-smaller> </x-tad-smaller><x-tad-smaller>myList</x-tad-smaller><x-tad-smaller> --</x-tad-smaller><x-tad-smaller> slow</x-tad-smaller><x-tad-smaller>
</x-tad-smaller><x-tad-smaller>set</x-tad-smaller><x-tad-smaller> </x-tad-smaller><x-tad-smaller>dummy</x-tad-smaller><x-tad-smaller> </x-tad-smaller><x-tad-smaller>to</x-tad-smaller><x-tad-smaller> 5000 - </x-tad-smaller><x-tad-smaller>n</x-tad-smaller><x-tad-smaller>
</x-tad-smaller><x-tad-smaller>end</x-tad-smaller><x-tad-smaller> </x-tad-smaller><x-tad-smaller>repeat</x-tad-smaller><x-tad-smaller>
</x-tad-smaller><x-tad-smaller>set</x-tad-smaller><x-tad-smaller> </x-tad-smaller><x-tad-smaller>t2</x-tad-smaller><x-tad-smaller> </x-tad-smaller><x-tad-smaller>to</x-tad-smaller><x-tad-smaller> </x-tad-smaller><x-tad-smaller>the</x-tad-smaller><x-tad-smaller> </x-tad-smaller><x-tad-smaller>MP Ticks</x-tad-smaller><x-tad-smaller>
</x-tad-smaller><x-tad-smaller>log</x-tad-smaller><x-tad-smaller> (</x-tad-smaller><x-tad-smaller>t2</x-tad-smaller><x-tad-smaller> - </x-tad-smaller><x-tad-smaller>t1</x-tad-smaller><x-tad-smaller>) --</x-tad-smaller><x-tad-smaller> 850 ticks</x-tad-smaller><x-tad-smaller>


</x-tad-smaller><x-tad-smaller>set</x-tad-smaller><x-tad-smaller> </x-tad-smaller><x-tad-smaller>t1</x-tad-smaller><x-tad-smaller> </x-tad-smaller><x-tad-smaller>to</x-tad-smaller><x-tad-smaller> </x-tad-smaller><x-tad-smaller>the</x-tad-smaller><x-tad-smaller> </x-tad-smaller><x-tad-smaller>MP Ticks</x-tad-smaller><x-tad-smaller>
</x-tad-smaller><x-tad-smaller>repeat</x-tad-smaller><x-tad-smaller> </x-tad-smaller><x-tad-smaller>with</x-tad-smaller><x-tad-smaller> </x-tad-smaller><x-tad-smaller>n</x-tad-smaller><x-tad-smaller> </x-tad-smaller><x-tad-smaller>in</x-tad-smaller><x-tad-smaller> </x-tad-smaller><x-tad-smaller>my</x-tad-smaller><x-tad-smaller> </x-tad-smaller><x-tad-smaller>myList</x-tad-smaller><x-tad-smaller> --</x-tad-smaller><x-tad-smaller> fast</x-tad-smaller><x-tad-smaller>
</x-tad-smaller><x-tad-smaller>set</x-tad-smaller><x-tad-smaller> </x-tad-smaller><x-tad-smaller>dummy</x-tad-smaller><x-tad-smaller> </x-tad-smaller><x-tad-smaller>to</x-tad-smaller><x-tad-smaller> 5000 - </x-tad-smaller><x-tad-smaller>n</x-tad-smaller><x-tad-smaller>
</x-tad-smaller><x-tad-smaller>end</x-tad-smaller><x-tad-smaller> </x-tad-smaller><x-tad-smaller>repeat</x-tad-smaller><x-tad-smaller>
</x-tad-smaller><x-tad-smaller>set</x-tad-smaller><x-tad-smaller> </x-tad-smaller><x-tad-smaller>t2</x-tad-smaller><x-tad-smaller> </x-tad-smaller><x-tad-smaller>to</x-tad-smaller><x-tad-smaller> </x-tad-smaller><x-tad-smaller>the</x-tad-smaller><x-tad-smaller> </x-tad-smaller><x-tad-smaller>MP Ticks</x-tad-smaller><x-tad-smaller>
</x-tad-smaller><x-tad-smaller>log</x-tad-smaller><x-tad-smaller> (</x-tad-smaller><x-tad-smaller>t2</x-tad-smaller><x-tad-smaller> - </x-tad-smaller><x-tad-smaller>t1</x-tad-smaller><x-tad-smaller>) --</x-tad-smaller><x-tad-smaller> 10 ticks</x-tad-smaller>


I'll be using "Nigel" and "Serge" a lot more often now.

Martin




On 22-Mar-05, at 7:09 AM, Paul Berkowitz wrote:

<x-tad-bigger>On 3/21/05 9:14 PM, "Mark Butcher" <email@hidden> wrote:</x-tad-bigger>



<x-tad-bigger> On 2005, Mar 21, , at 7:59 PM, Martin Fuhrer wrote:</x-tad-bigger>


<x-tad-bigger> I want to create a list of items, eg. a list of numbers from 5000 to -5000.  In Script Editor I can run the script:</x-tad-bigger>

<x-tad-bigger> </x-tad-bigger><x-tad-bigger>set</x-tad-bigger><x-tad-bigger> </x-tad-bigger><x-tad-bigger>myList</x-tad-bigger><x-tad-bigger> </x-tad-bigger><x-tad-bigger>to</x-tad-bigger><x-tad-bigger> {}</x-tad-bigger>
<x-tad-bigger> </x-tad-bigger><x-tad-bigger>repeat</x-tad-bigger><x-tad-bigger> </x-tad-bigger><x-tad-bigger>with</x-tad-bigger><x-tad-bigger> </x-tad-bigger><x-tad-bigger>n</x-tad-bigger><x-tad-bigger> </x-tad-bigger><x-tad-bigger>from</x-tad-bigger><x-tad-bigger> 1 </x-tad-bigger><x-tad-bigger>to</x-tad-bigger><x-tad-bigger> 10000</x-tad-bigger>
<x-tad-bigger>     </x-tad-bigger><x-tad-bigger>set</x-tad-bigger><x-tad-bigger> </x-tad-bigger><x-tad-bigger>end</x-tad-bigger><x-tad-bigger> </x-tad-bigger><x-tad-bigger>of</x-tad-bigger><x-tad-bigger> </x-tad-bigger><x-tad-bigger>myList</x-tad-bigger><x-tad-bigger> </x-tad-bigger><x-tad-bigger>to</x-tad-bigger><x-tad-bigger> 5000 - </x-tad-bigger><x-tad-bigger>n  </x-tad-bigger><x-tad-bigger>--</x-tad-bigger><x-tad-bigger>SLOW!!</x-tad-bigger><x-tad-bigger> </x-tad-bigger>
<x-tad-bigger>end</x-tad-bigger><x-tad-bigger> </x-tad-bigger><x-tad-bigger>repeat</x-tad-bigger><x-tad-bigger> </x-tad-bigger>
<x-tad-bigger> </x-tad-bigger>
<x-tad-bigger> Unfortunately, this is slow (about 30 seconds on my Powerbook G4 1.5 GHz).  A much faster method is:</x-tad-bigger>

<x-tad-bigger> </x-tad-bigger><x-tad-bigger>set</x-tad-bigger><x-tad-bigger> </x-tad-bigger><x-tad-bigger>myList</x-tad-bigger><x-tad-bigger> </x-tad-bigger><x-tad-bigger>to</x-tad-bigger><x-tad-bigger> {}</x-tad-bigger>
<x-tad-bigger> </x-tad-bigger><x-tad-bigger>set</x-tad-bigger><x-tad-bigger> </x-tad-bigger><x-tad-bigger>myListRef</x-tad-bigger><x-tad-bigger> </x-tad-bigger><x-tad-bigger>to</x-tad-bigger><x-tad-bigger> </x-tad-bigger><x-tad-bigger>a reference</x-tad-bigger><x-tad-bigger> </x-tad-bigger><x-tad-bigger>to</x-tad-bigger><x-tad-bigger> </x-tad-bigger><x-tad-bigger>myList</x-tad-bigger><x-tad-bigger> </x-tad-bigger>

<x-tad-bigger>repeat</x-tad-bigger><x-tad-bigger> </x-tad-bigger><x-tad-bigger>with</x-tad-bigger><x-tad-bigger> </x-tad-bigger><x-tad-bigger>n</x-tad-bigger><x-tad-bigger> </x-tad-bigger><x-tad-bigger>from</x-tad-bigger><x-tad-bigger> 1 </x-tad-bigger><x-tad-bigger>to</x-tad-bigger><x-tad-bigger> 10000</x-tad-bigger>
<x-tad-bigger>     </x-tad-bigger><x-tad-bigger>set</x-tad-bigger><x-tad-bigger> </x-tad-bigger><x-tad-bigger>end</x-tad-bigger><x-tad-bigger> </x-tad-bigger><x-tad-bigger>of</x-tad-bigger><x-tad-bigger> </x-tad-bigger><x-tad-bigger>myListRef</x-tad-bigger><x-tad-bigger> </x-tad-bigger><x-tad-bigger>to</x-tad-bigger><x-tad-bigger> 5000 - </x-tad-bigger><x-tad-bigger>n  </x-tad-bigger><x-tad-bigger>--</x-tad-bigger><x-tad-bigger>FAST!!</x-tad-bigger><x-tad-bigger> </x-tad-bigger>
<x-tad-bigger>end</x-tad-bigger><x-tad-bigger> </x-tad-bigger><x-tad-bigger>repeat</x-tad-bigger>
<x-tad-bigger> </x-tad-bigger><x-tad-bigger>  </x-tad-bigger>
<x-tad-bigger> This takes less than a second when run in Script Editor.   </x-tad-bigger>

<x-tad-bigger> Unfortunately, the second script will not work in an Applescript Studio project.  The loop produces the "NSCannotCreateScriptCommandError (10)".  The first script runs fine in Applescript Studio, but once again, takes about 30 seconds to complete.</x-tad-bigger>


<x-tad-bigger> If I recall correctly, 'my' worked for me:</x-tad-bigger>

<x-tad-bigger> </x-tad-bigger><x-tad-bigger>repeat</x-tad-bigger><x-tad-bigger> </x-tad-bigger><x-tad-bigger>with</x-tad-bigger><x-tad-bigger> </x-tad-bigger><x-tad-bigger>n</x-tad-bigger><x-tad-bigger> </x-tad-bigger><x-tad-bigger>from</x-tad-bigger><x-tad-bigger> 1 </x-tad-bigger><x-tad-bigger>to</x-tad-bigger><x-tad-bigger> 10000</x-tad-bigger>
<x-tad-bigger>     </x-tad-bigger><x-tad-bigger>set</x-tad-bigger><x-tad-bigger> </x-tad-bigger><x-tad-bigger>end</x-tad-bigger><x-tad-bigger> </x-tad-bigger><x-tad-bigger>of my</x-tad-bigger><x-tad-bigger> myList</x-tad-bigger><x-tad-bigger> </x-tad-bigger><x-tad-bigger>to</x-tad-bigger><x-tad-bigger> 5000 - </x-tad-bigger><x-tad-bigger>n  </x-tad-bigger><x-tad-bigger>--</x-tad-bigger><x-tad-bigger>FAST!!</x-tad-bigger><x-tad-bigger> </x-tad-bigger>
<x-tad-bigger>end</x-tad-bigger><x-tad-bigger> </x-tad-bigger><x-tad-bigger>repeat</x-tad-bigger>
<x-tad-bigger> </x-tad-bigger>

<x-tad-bigger> That won't work as is if myList was originally defined within a handler - as virtually all Studio variables are - since it's then a local variable by default and 'my' won't operate - you'll get an error.</x-tad-bigger>

<x-tad-bigger> The simplest thing to do is to just declare myList as</x-tad-bigger>

<x-tad-bigger> global myList</x-tad-bigger>

<x-tad-bigger> at the very top of your script, and then use 'my' as Mark says. (I can't imagine why that wouldn't be suitable, but alternatives would be to declare it as a </x-tad-bigger>

<x-tad-bigger> property myList : {} at the top </x-tad-bigger>

<x-tad-bigger> - which does the same thing - or to use instead a "Serge" script object within the handler:</x-tad-bigger>

<x-tad-bigger> script listScript</x-tad-bigger>
<x-tad-bigger>     property theList : myList</x-tad-bigger>
<x-tad-bigger> end script</x-tad-bigger>

<x-tad-bigger> and then refer to it as </x-tad-bigger>

<x-tad-bigger>     listScript's theList</x-tad-bigger>

<x-tad-bigger> everywhere within the handler thereafter. I can't see the advantage here, and some disadvantages if you need to refer the the list outside the handler.</x-tad-bigger>

<x-tad-bigger> -- </x-tad-bigger>
<x-tad-bigger> Paul Berkowitz</x-tad-bigger>
_______________________________________________
Do not post admin requests to the list. They will be ignored.
Applescript-studio mailing list (email@hidden)
Help/Unsubscribe/Update your Subscription:
http://lists.apple.com/mailman/options/applescript-studio/email@hidden

This email sent to email@hidden
 _______________________________________________
Do not post admin requests to the list. They will be ignored.
Applescript-studio mailing list      (email@hidden)
Help/Unsubscribe/Update your Subscription:
http://lists.apple.com/mailman/options/applescript-studio/email@hidden

This email sent to email@hidden

References: 
 >Re: Fastest Method to Append to a List (From: Paul Berkowitz <email@hidden>)



Visit the Apple Store online or at retail locations.
1-800-MY-APPLE

Contact Apple | Terms of Use | Privacy Policy

Copyright © 2007 Apple Inc. All rights reserved.