【问题标题】:Prevent my script from using so much memory?防止我的脚本使用这么多内存?
【发布时间】:2013-08-23 22:46:52
【问题描述】:

我有一个脚本,它列出了数组中所有可能的排列,诚然,它可以用来代替单词表。如果我让这个工作,除非有尝试限制,否则最终不可能不成功。

无论如何,该脚本显然会占用大量内存,这会使任何服务器着火。我需要帮助的是找到一种分散内存使用的方法,例如以某种方式重置脚本并通过转到另一个文件或其他东西(可能通过使用 Sessions)继续它离开的地方。我不知道。

这是我目前所得到的:

<?php 
ini_set('memory_limit', '-1');
ini_set('max_execution_time', '0');

$possible = "abcdefghi";

$input = "$possible";

function string_getpermutations($prefix, $characters, &$permutations)
{
    if (count($characters) == 1)
        $permutations[] = $prefix . array_pop($characters);
    else
    {
        for ($i = 0; $i < count($characters); $i++)
        {
            $tmp = $characters;
            unset($tmp[$i]);

            string_getpermutations($prefix . $characters[$i], array_values($tmp), $permutations);
        }
    }
}
$characters = array();
for ($i = 0; $i < strlen($input); $i++)
    $characters[] = $input[$i];
$permutations = array();

print_r($characters);
string_getpermutations("", $characters, $permutations);

print_r($permutations);

?>

有什么想法吗? :3

【问题讨论】:

    标签: php session memory crash


    【解决方案1】:

    您可以将排列存储在每个 XXX 排列的文件中,然后在需要时以正确的顺序重新打开文件以显示/使用您的排列。 (文件或任何你想要的,只要你能释放 PhP 内存)

    我看到你只是在呼应排列,但也许你想用它做点别的?所以这取决于某种方式。

    此外,在进行排列时,请尝试尽快取消设置尽可能多的未使用变量。

    编辑:有时,像对排列数组一样使用引用可能会导致更大的内存使用。以防万一你没有尝试,检查哪个更好,有或没有

    【讨论】:

    • 我想我别无选择,只能这样做。我将如何取消设置变量?
    • 在此之前,请使用 PhP memory_get_usage 函数查看内存运行情况,何时开始增长等。然后尝试拆分文件中的排列并检查内存上的更改用法。如果您看到改进,那么当她变得未使用时尝试取消设置任何变量(或者至少是数组,或数组的一部分,因为这些是占用最多内存的)并重新检查内存等,直到你不能这样做更多。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多