我意识到这个问题的膝盖反应是“你不要。”,但是请听我说。获取PHP中对象的引用计数?
基本上我在一个SQL上运行在一个活动记录系统上,为了防止同一个数据库行出现重复的对象,我在当前每个当前加载的对象的工厂中保留一个“数组”(使用自动增量的id '作为关键)。
的问题是,当我试图通过此系统上的奇怪的时刻来处理90,000+行,PHP碰到内存问题。这很容易通过每隔几百行运行一次垃圾收集来解决,但不幸的是,由于工厂存储了每个对象的副本,PHP的垃圾收集将不会释放任何这些节点。
我能想到的,唯一的解决办法是检查是否存放在工厂的对象的引用计数等于一(即没有被引用的是类),如果是释放他们。这将解决我的问题,但PHP没有引用计数方法? (除了debug_zval_dump,但几乎不可用)。
你只是将ID存储在数组或整个对象中? – 2010-09-21 21:50:27
ID是关键,整个对象'reference'是value:static $ cache = array(1122 => new Client(1222),1864 => new Client(1864),...) – Josh 2010-09-21 21:56:49