我有我追加到在一个循环数组:PHP内存耗尽 - 数组或sql?
array_push($obj->{$type.'listings'}, $listing);
循环,使一束远程调用和提取数据,我想在文件存储和作为一种高速缓存的使用。
运行这个“缓存例程”时,如果我序列化这个数组,它报告刚好超过5MB。要创建5MB阵列,该脚本会耗尽100MB的内存。我正在非常小心地取消设置变量以尽可能释放内存。我已经尽可能地评论了所有的东西,并且通过函数取消注释来查看内存在哪里建立。当我推入数组时,它肯定会发生。如果我不使用array_push,那么使用memory_get_usage()和gc_collect_cycles()我可以看到一些相当稳定的内存使用一些尖峰,但它随着它的移动而释放。
只要我推入数组,它就会变得疯狂,内存使用量就会堆积如山。
有没有关于如何处理这种情况的任何想法?
我不能用PHP构建像这样的大型数组吗?
当我构建它时,是否有办法将阵列刷新到文件?让我们假设我可以将它构建并存储在一个文件中。当我想使用它时,我会使用从文件中提取的相同数量的资源....还是内存耗尽,因为它是在动态添加到它正在构建?
这是我应该考虑使用SQL的东西吗?并将每个循环的运行存储在一个单独的行中?
只是为了踢,我补充说:ini_set('memory_limit', '-1');
只是为了看它是否会运行。
它做到了,内存使用量达到了超过100 MB,并且序列化对象大小仅略高于8MB。现在,这并不是很有用,因为我只是处理一个数据样本,而且可能会变得更大。
无论如何,你可能想要优化这种情况的想法会很棒。
你说你正在小心不关心的东西 - 你是否释放了你的mySQL结果?如果你做得足够多,这往往会吸引记忆。 – Westie 2012-02-12 13:16:59
截至目前,我没有在SQL中存储任何东西。我只是问这是否是一条更好的路线。但有一些SQL查询获取数据,并释放他们我使用未设置($结果)其中$结果保存结果集 – 2012-02-12 14:01:26
我从来没有说过。我的意思是使用'mySQLi_Result :: Free()'或其他任何你使用的东西 - 不确定unset()是否会完全释放你的请求中的内存。 – Westie 2012-02-12 14:30:10