php 配置在内存溢出,php-防止内存溢出的正确方法,知道允许的内存大小,但是无法更改它...

标签: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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值