On Nov 6, 2007, at 3:17 PM, Roché Compaan wrote:

On Tue, 2007-11-06 at 14:51 -0500, Jim Fulton wrote:
On Nov 6, 2007, at 2:40 PM, Sidnei da Silva wrote:

Despite this change there are still a huge amount
of unexplained calls to the 'persistent_id' method of the
ObjectWriter
in serialize.py.

Why 'unexplained'? 'persistent_id' is called from the Pickler instance
being used in ObjectWriter._dump(). It is called for each and every
single object reachable from the main object, due to the way Pickler
works (I believe). Maybe persistent_id can be analysed and optimized
for the most common cases?

Yup.

Note that there is a undocumented feature in cPickle that I added
years ago to deal with this issue but never got around to pursuing.
Maybe someone else would be able to spend the time to try it out and
report back.

If you set inst_persistent_id, rather than persistent_id, on a
pickler, then the hook will only be called for instances.  This
should eliminate that vast majority of the calls.

So is this as simple as modifying the following code in the
ObjectWriter:

        self._p.persistent_id = self.persistent_id

to:

        self._p.inst_persistent_id = self.persistent_id

Yes.

I'll give it a go as part of my benchmarks that I'm running and report
back.


I hope you weren't waiting for my answer.

Jim

--
Jim Fulton
Zope Corporation


_______________________________________________
For more information about ZODB, see the ZODB Wiki:
http://www.zope.org/Wikis/ZODB/

ZODB-Dev mailing list  -  ZODB-Dev@zope.org
http://mail.zope.org/mailman/listinfo/zodb-dev

Reply via email to