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