Author: lukeplant
Date: 2009-12-16 15:25:00 -0600 (Wed, 16 Dec 2009)
New Revision: 11883

Modified:
   django/trunk/django/db/models/loading.py
Log:
Fixed #12389 - performance enhancement of get_models()

Thanks to Travis Cline for the patch, which gives about 35% speed increase
for the testsuite (with SQLite in-memory DB).



Modified: django/trunk/django/db/models/loading.py
===================================================================
--- django/trunk/django/db/models/loading.py    2009-12-16 19:41:59 UTC (rev 
11882)
+++ django/trunk/django/db/models/loading.py    2009-12-16 21:25:00 UTC (rev 
11883)
@@ -35,6 +35,7 @@
         postponed = [],
         nesting_level = 0,
         write_lock = threading.RLock(),
+        _get_models_cache = {},
     )
 
     def __init__(self):
@@ -140,6 +141,11 @@
         explicit intermediate table) are not included. However, if you
         specify include_auto_created=True, they will be.
         """
+        cache_key = (app_mod, include_auto_created)
+        try:
+            return self._get_models_cache[cache_key]
+        except KeyError:
+            pass
         self._populate()
         if app_mod:
             model_list = self.app_models.get(app_mod.__name__.split('.')[-2], 
SortedDict()).values()
@@ -148,7 +154,8 @@
             for app_entry in self.app_models.itervalues():
                 model_list.extend(app_entry.values())
         if not include_auto_created:
-            return filter(lambda o: not o._meta.auto_created, model_list)
+            model_list = filter(lambda o: not o._meta.auto_created, model_list)
+        self._get_models_cache[cache_key] = model_list
         return model_list
 
     def get_model(self, app_label, model_name, seed_cache=True):
@@ -183,6 +190,7 @@
                 if os.path.splitext(fname1)[0] == os.path.splitext(fname2)[0]:
                     continue
             model_dict[model_name] = model
+        self._get_models_cache.clear()
 
 cache = AppCache()
 

--

You received this message because you are subscribed to the Google Groups 
"Django updates" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/django-updates?hl=en.


Reply via email to