[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