2010-07-19 6 views
3

J'ai configuré Zend_Db_Table_Abstract de sorte qu'il utilise un cache de métadonnées, puis profilé avec xhprof pour voir combien de mémoire il utilise.Zend_Cache unserialize - mémoire hog?

Éteint 34 appels de _setupMetadata à Zend_Cache_Core :: load utilise 7 Mo de mémoire, la plus grande partie étant utilisée en appelant unserialize.

La configuration du cache de métadonnées est:

resources.cachemanager.db_metadata.frontend.name = Core 
resources.cachemanager.db_metadata.frontend.options.automatic_serialization = true 
resources.cachemanager.db_metadata.frontend.options.lifetime = null 

resources.cachemanager.db_metadata.backend.name = File 
resources.cachemanager.db_metadata.backend.options.cache_dir = APPLICATION_PATH "/../data/cache/db_metadata" 

Est-ce un problème commun ou suis-je manque quelque chose?

+0

Il semble que [la mise en cache des métadonnées de table] (http://framework.zend.com/manual/en/zend.db.table.html#zend.db.table.metadata.caching) utilise une instance de [Zend_Cache_Core] (http://framework.zend.com/manual/fr/zend.cache.frontends.html#zend.cache.frontends.core). Il y a [beaucoup de backends] (http://framework.zend.com/manual/fr/zend.cache.backends.html) disponibles. Est-ce qu'ils fonctionnent mieux, en termes de mémoire? – Charles

Répondre

0

Étant donné que vous êtes un objet de sérialisation, il faut beaucoup de mémoire. Surtout objet Zend_Db_ *.

Ici nous avons eu le même problème et nous finissons par faire votre propre système de cache. Ce que vous pouvez faire est de définir sleep/wakeup afin que vous supprimiez tout ivar inutile de Zend_Db_Table_Row_Abstract mais vous devez vous assurer de ne pas casser l'invariant de classe.

Bonne chance. :)

Questions connexes