# HG changeset patch # User Paul Boddie # Date 1319151639 -7200 # Node ID 1f2350a0b007a0a7a75ea487c0f23f3257b5490b # Parent 90f4bcc889524fd9bb979c9daa29089a45c6af10 Added caching of attribute-related table lookups, reducing memory consumption and improving performance substantially. diff -r 90f4bcc88952 -r 1f2350a0b007 micropython/table.py --- a/micropython/table.py Fri Oct 21 00:59:47 2011 +0200 +++ b/micropython/table.py Fri Oct 21 01:00:39 2011 +0200 @@ -213,6 +213,8 @@ self.names = [] self.displaced_list = None self.raw = None + self.all_cache = {} + self.any_cache = {} def access(self, objname, attrname): @@ -426,7 +428,10 @@ returned. """ - return self._objects_plus_status(names, self.all_possible_objects) + names = tuple(names) + if not self.all_cache.has_key(names): + self.all_cache[names] = self._objects_plus_status(names, self.all_possible_objects) + return self.all_cache[names] def any_possible_objects_plus_status(self, names): @@ -437,7 +442,10 @@ returned. """ - return self._objects_plus_status(names, self.any_possible_objects) + names = tuple(names) + if not self.any_cache.has_key(names): + self.any_cache[names] = self._objects_plus_status(names, self.any_possible_objects) + return self.any_cache[names] class ParameterTable(Table):