2010-07-19 2 views
3

Я установил Zend_Db_Table_Abstract, поэтому он использует кеш метаданных, а затем профилируется с помощью xhprof, чтобы узнать, сколько памяти он использует.Zend_Cache unserialize - memory hog?

Выключает 34 вызова от _setupMetadata до Zend_Cache_Core :: загрузка использует память 7mb, большая часть которой используется при вызове unserialize.

Конфигурация для кэша метаданных является:

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" 

Это общая проблема, или я что-то отсутствует?

+0

Похоже, [кэширование метаданных таблицы] (http://framework.zend.com/manual/en/zend.db.table.html#zend.db.table.metadata.caching) использует любой экземпляр [Zend_Cache_Core] (http://framework.zend.com/manual/en/zend.cache.frontends.html#zend.cache.frontends.core). Существует [множество бэкэндов] (http://framework.zend.com/manual/en/zend.cache.backends.html). Выполняют ли они себя лучше, с точки зрения памяти? – Charles

ответ

0

Поскольку вы сериализуете объект, требуется много памяти. Особенно Zend_Db_ * объект.

Здесь у нас была такая же проблема, и мы закончили создание собственной системы кеша.

Что вы можете сделать, так это определить сон/пробуждение, чтобы вы удалили ненужный ivar из Zend_Db_Table_Row_Abstract, но вы должны не нарушать инвариант класса.

Удачи. :)