[IronPython] Performance of dir

Michael Foord fuzzyman at voidspace.org.uk
Sun May 24 19:35:25 CEST 2009


Dino Viehland wrote:
> You probably can - dir is currently not optimized at all.  Instead it's
> designed to ensure consistent results with member access.  Due to that
> it does do more reflection than is strictly necessary.  So you can do
> reflection and translate operator methods to __add__ and friends and it
> may be faster - but getting it 100% correct will be more challenging :) And
> then keeping it consistent going forward will be even more difficult.
>   

It doesn't sound like there is enough in it to make it worth it. Now of 
course if we could pre-cache that would be a different matter... Maybe 
retask the Wing PI file generator to do the job...

Michael

> -----Original Message-----
> From: users-bounces at lists.ironpython.com [mailto:users-bounces at lists.ironpython.com] On Behalf Of Michael Foord
> Sent: Sunday, May 24, 2009 6:21 AM
> To: Discussion of IronPython
> Subject: Re: [IronPython] Performance of dir
>
> Curt Hagenlocher wrote:
>   
>> The first time you do a dir() of Form, we have to use Reflection to
>> introspect
>> - every member on Form
>> - every member on ContainerControl
>> - every member on ScrollableControl
>> - every member on Control
>> - every member on Component
>> (aka the inheritance hierarchy of Form :D )
>>
>> After that, the members are all cached and subsequent access should be
>> quite fast.
>>     
>
> Yes, the second access is much faster. Thanks. I was hoping it was doing
> extra work and we could build a faster equivalent that only did the
> reflection, but oh well. :-)
>
> Michael
>
>   
>> On Sat, May 23, 2009 at 4:47 PM, Michael Foord
>> <fuzzyman at voidspace.org.uk <mailto:fuzzyman at voidspace.org.uk>> wrote:
>>
>>     Michael Foord wrote:
>>
>>         Hello all,
>>
>>         On IronPython 2.0.1 the last line of this code takes ~4
>>         seconds the first time it is executed:
>>
>>         >>> import clr
>>         >>> clr.AddReference('System.Windows.Forms')
>>         >>> from System.Windows.Forms import *
>>         >>> dir(Form)
>>
>>         Form.__dict__.keys() (which for a .NET type is equivalent)
>>         takes ~1 second or less. What extra work is dir doing? (Is it
>>         pulling in the xml docstrings?)
>>
>>
>>     Actually they're not equivalent, my bad:
>>
>>     >>> len(Form.__dict__)
>>     287
>>     >>> len(dir(Form))
>>     540
>>
>>     Michael
>>
>>
>>         Thanks
>>
>>         Michael
>>
>>
>>
>>     --
>>     http://www.ironpythoninaction.com/
>>     http://www.voidspace.org.uk/blog
>>
>>
>>     _______________________________________________
>>     Users mailing list
>>     Users at lists.ironpython.com <mailto:Users at lists.ironpython.com>
>>     http://lists.ironpython.com/listinfo.cgi/users-ironpython.com
>>
>>
>> ------------------------------------------------------------------------
>>
>> _______________________________________________
>> Users mailing list
>> Users at lists.ironpython.com
>> http://lists.ironpython.com/listinfo.cgi/users-ironpython.com
>>
>>     
>
>
> --
> http://www.ironpythoninaction.com/
> http://www.voidspace.org.uk/blog
>
>
> _______________________________________________
> Users mailing list
> Users at lists.ironpython.com
> http://lists.ironpython.com/listinfo.cgi/users-ironpython.com
> _______________________________________________
> Users mailing list
> Users at lists.ironpython.com
> http://lists.ironpython.com/listinfo.cgi/users-ironpython.com
>   


-- 
http://www.ironpythoninaction.com/
http://www.voidspace.org.uk/blog





More information about the Ironpython-users mailing list