如何解决如何使PHP实际上释放分配的RAM?
我最近一直在测试与内存相关的东西。仔细阅读:
$data = load_in_huge_file('test.csv');
while (1)
{
var_dump(memory_get_usage(false));
var_dump(memory_get_usage(true));
sleep(4);
unset($data);
gc_collect_cycles();
}
对于第一个循环,这将为第一次调用memory_get_usage和第二次调用输出巨大的值。
对于第二个(以及更进一步的)循环,这将为第一次调用memory_get_usage输出一个较小的值,为第二次调用输出一个巨大的值。
这意味着即使我未设置保存所有数据的变量,实际的“已分配”内存也保持不变。
如果我做同样的事情:
gc_collect_cycles()
分配的“实际”内存在分配后保持不变,并且没有“释放”。
(load_in_huge_file函数基本上运行fopen blabla,然后运行fclose。)
对此我该怎么办?看来PHP仍在“使用” RAM,而我的重型PHP CLI脚本最终却在逐个处理许多CSV文件时耗尽了我所有的RAM,并且没有返回内存。
我完全不了解CellFormula cellFormula = new CellFormula("SUM(S11:S13)");
的功能。手册至少还不清楚。
也许unset()足够了,但是“需要一些时间”吗?也许“实际”分配的内存只是令人困惑的术语,实际上并不意味着RAM被“占用”了吗?
(关于计算机的所有事情使我永远困惑。如果没有每个最后细节的无尽附加复杂性,就不可能真正学到任何东西。)
解决方法
根据我们的编程经验,我们建议您不要将整个数据保存到一个变量中(到内存中)
最好在https://www.php.net/manual/en/function.fgetcsv.php
的帮助下使用循环仅将1行加载到内存中,而不是整个文件。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。