[Zope-dev] zope.interface memory optimization
Brian Sutherland
brian at vanguardistas.net
Thu Nov 11 04:12:52 EST 2010
On Wed, Nov 10, 2010 at 12:07:00PM +0100, Charlie Clark wrote:
> Am 10.11.2010, 01:40 Uhr, schrieb Brian Sutherland
> <brian at vanguardistas.net>:
>
> >> > On the micro benchmarks, the only difference I see is a memory
> >> > improvement which I think will not survive in practice because most
> >>
> >> ... ?
> > Er, somehow my thoughts didn't make it into text:
> > attributes are zope.schema fields (i.e. subclasses of Attribute).
> > To really make that work, you'd have to add __slots__ to most of the
> > classes in zope.schema as well.
>
> It might be purely academic but if this does significantly reduce memory
> use then it might be worth pursuing.
Turns out it's not that academic. I tried a bit harder and managed to
apply __slots__ to the Element, Attribute and Method classes in
zope.interface. That saved an additional 0.5 % of memory (bytes).
I have a small patch to zope.schema that fixes the breakage there.
It looks like there is an additional 0.5% available if zope.schema is
refactored to use slots as well.
> Slots are supposed to be beneficial
> when you've got lots of objects around. Zope schema fields are pretty
> static anyway so I don't see a great penalty in having to add slots to
> them, although obviously a migration of a larger project would probably be
> a pain.
Searching for __dict__ here:
http://zope3.pov.lt/trac/browser/zope.schema/trunk/src/zope/schema/_bootstrapfields.py
Will give you a good idea of the problems. Field.bind and
ValidatedProperty both depend heavily on __dict__.
For ValidatedProperty in particular I have no idea how that would work
when using slots.
> Back to the micro-optimisation. At Jeff Rush's talk at PyCon this year he
> covered the penalties incurred by "." lookups so that might be something
> that could be investigated but might it also be possible to "memoize" the
> method calls? I keep forgetting when you can't do that.
I had a look at http://en.wikipedia.org/wiki/Memoization, but I don't
see how it could be applied in this case.
> Charlie
> --
> Charlie Clark
> Managing Director
> Clark Consulting & Research
> German Office
> Helmholtzstr. 20
> Düsseldorf
> D- 40215
> Tel: +49-211-600-3657
> Mobile: +49-178-782-6226
> _______________________________________________
> Zope-Dev maillist - Zope-Dev at zope.org
> https://mail.zope.org/mailman/listinfo/zope-dev
> ** No cross posts or HTML encoding! **
> (Related lists -
> https://mail.zope.org/mailman/listinfo/zope-announce
> https://mail.zope.org/mailman/listinfo/zope )
--
Brian Sutherland
More information about the Zope-Dev
mailing list