Rev 3844: Intern the key portions that are easily available. in http://bzr.arbash-meinel.com/branches/bzr/brisbane/hack2

John Arbash Meinel john at arbash-meinel.com
Tue Mar 3 03:48:56 GMT 2009


At http://bzr.arbash-meinel.com/branches/bzr/brisbane/hack2

------------------------------------------------------------
revno: 3844
revision-id: john at arbash-meinel.com-20090303034527-gdvu15fcpz7idixg
parent: john at arbash-meinel.com-20090302020201-wac656yvv0yeheiz
committer: John Arbash Meinel <john at arbash-meinel.com>
branch nick: hack2
timestamp: Mon 2009-03-02 21:45:27 -0600
message:
  Intern the key portions that are easily available.
  
  This saves a modest amount of memory when processing lots of keys.
-------------- next part --------------
=== modified file 'bzrlib/_btree_serializer_c.pyx'
--- a/bzrlib/_btree_serializer_c.pyx	2008-09-24 04:15:03 +0000
+++ b/bzrlib/_btree_serializer_c.pyx	2009-03-03 03:45:27 +0000
@@ -38,6 +38,7 @@
     Py_ssize_t PyString_GET_SIZE_ptr "PyString_GET_SIZE" (PyObject *)
     char * PyString_AS_STRING_ptr "PyString_AS_STRING" (PyObject *)
     int PyString_AsStringAndSize_ptr(PyObject *, char **buf, Py_ssize_t *len)
+    object PyString_InternFromString(char *)
     int PyTuple_CheckExact(object t)
     Py_ssize_t PyTuple_GET_SIZE(object t)
     PyObject *PyTuple_GET_ITEM_ptr_object "PyTuple_GET_ITEM" (object tpl, int index)
@@ -142,8 +143,11 @@
             # TODO: Consider using PyIntern_FromString, the only caveat is that
             # it assumes a NULL-terminated string, so we have to check if
             # temp_ptr[0] == c'\0' or some other char.
-            key_element = safe_string_from_size(self._start,
-                                                temp_ptr - self._start)
+            if temp_ptr[0] == c'\0':
+                key_element = PyString_InternFromString(self._start)
+            else:
+                key_element = safe_string_from_size(self._start,
+                                                    temp_ptr - self._start)
             # advance our pointer
             self._start = temp_ptr + 1
             PyList_Append(key_segments, key_element)

=== modified file 'bzrlib/btree_index.py'
--- a/bzrlib/btree_index.py	2009-02-18 05:40:39 +0000
+++ b/bzrlib/btree_index.py	2009-03-03 03:45:27 +0000
@@ -585,7 +585,7 @@
         for line in lines[2:]:
             if line == '':
                 break
-            nodes.append(tuple(line.split('\0')))
+            nodes.append(tuple(map(intern, line.split('\0'))))
         return nodes
 
 



More information about the bazaar-commits mailing list