gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-10-31 20:50:08 25 4
gpt4 key购买 nike

在 stackoverflow 上搜索答案后,我决定只处理与最大允许内存扩展有关的问题。我的问题是,是否有人知道如何插入适当的制动器,以防脚本因内存耗尽而失败。

对于 A 点,这也与我未能找到答案的另一个问题非常密切相关,即 B 点,这就是时间限制:关于如何延长时间限制的另一组答案使用ini_set 等等,通过手动创建断点找到了可能的解决方案,以防脚本已经超过适当的时间。这很好,但是无法控制您正在加载的脚本可能无法阻止它。

现在回到问题,有没有人知道如何用安全的方法正确地防止此类错误发生?如果真的有关于此主题的已回答问题,请将我链接到它。

最好的问候,

最佳答案

减少程序可能使用的内存量的常用方法是将问题分解成更小的部分,迭代地优化答案,使用磁盘上的文件代替结构的内存等。在不知道应用程序细节的情况下,不可能真正提出最佳方法

但是请考虑在大约 100kb 的内存空间中对 100 兆字节的输入文件进行排序的任务;您可能认为如果不在内存中同时保存所有 100 兆字节,这项任务是不可能完成的。但是,您可以使用许多不同的方法轻松地将此问题拆分为更小的部分:

  • 或许对所有以整数开头的行进行排序 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 - 防止内存溢出的正确方法,知道允许的内存大小,但无法更改它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8584500/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com