标签:php
在寻找stackoverflow的答案之后,我决定唯一要解决的问题就是有关最大允许内存扩展的问题.我的问题是,是否有人知道如何插入适当的制动器,以防脚本由于耗尽内存而失败.
关于A点,这也与另一个我未能找到答案的问题(即B点)密切相关,这就是时间限制:关于如何使用ini_set扩展时间限制的另一组答案,以及依此类推,如果脚本已经超过适当的时间,则可以通过手动创建断点来找到可能的解决方案.很好,但是无法控制正在加载的脚本可能无法阻止它.
现在,回到问题所在,有人知道如何使用一种安全的方法正确地防止此类错误吗?如果真的有关于此主题的已回答问题,请链接至我.
最好的祝福,
解决方法:
减少程序可能使用的内存量的常用方法是将问题分解为多个部分,迭代地优化答案,使用磁盘上的文件代替内存来存储结构等.在不了解应用程序细节的情况下,真的建议最好的方法
但是考虑一下可能在100kb的内存空间中排序100兆字节输入文件的任务;您可能会认为如果没有一次将所有100 MB的内存实际容纳在内存中就不可能完成任务.但是,您可以通过许多不同的方法轻松地将此问题分解为较小的部分:
>也许对所有以整数0-1000 into one file, 1001-2000 into another file, 2001-3000 into a third file, etc.开头的行进行排序将所有行都隔离到不同的文件中之后,对每个文件进行排序,然后通过简单的合并合并输入文件.
>也许一次排序前1000行,将它们存储到一个临时文件中,然后将前1000行存储到另一个临时文件中,依此类推;然后通过从每个文件中选择最低的输出,将其输出,从其文件中删除它并进行迭代来选择merge the output.
考虑一下图像编辑的任务:您可能不将整个图像加载到内存中,而是只将要处理的部分读入内存,执行操作,然后立即将内容重新写回到磁盘.
或者,如果您的问题是大的正则表达式匹配,那么您可能会遇到一个严重的backtracking问题,即一次存储了太多状态.您可以转换为different matching operators以防止回溯,并且可以通过多次匹配解决问题.
这取决于您必须解决的问题,如何将其分成较小的部分以减少总体内存使用量.请注意,这些技术中的许多技术可能会增加执行时间,因为它们需要更多的磁盘IO或重新解决可能已保存在内存中的问题.有时它们会缩短执行时间,因为您处理或保留的数据越少,locality of reference越好,并且缓存可以工作得越好. (这很罕见.由于解决问题更加简单,请参见Programming Pearls,这是一个非常惊人的提速案例…)
标签:php
来源: https://codeday.me/bug/20191202/2084692.html