1

クエリから返された値を保持する配列を作成しています - 多次元配列に追加すると、スクリプトが最大 125Mb のメモリを消費し、配列が保持するはずのデータの合計量が 5Mb 以下であることを考慮すると、非常に奇妙です:

これが私がやっていることです:

try 
{
    if (!$link = mysql_connect(DB_Host, DB_User, DB_Password))
            Throw New Exception(mysql_error());
    if (!mysql_select_db("Spexplus_Demo"))
            throw New Exception(mysql_error());
} 
catch (Exception $e) 
{
    echo $e->getMessage().$e->getTraceAsString();
    exit(1);
}

$query = "select cda.categoryid as categoryId, 
                  cda.templatetype as templateType, 
                  hn.headerid as headerId, 
                  hn.name as headerName, 
                  an.attributeid as attributeId, 
                  an.name as attributeName
                  from categorydisplayattributes cda 
                  join categoryheader ch on cda.headerid = ch.headerid 
                  and cda.templatetype = ch.templatetype 
                  and cda.categoryid = ch.categoryid 
                  join headernames hn on cda.headerid = hn.headerid 
                  and hn.localeid = 1
                  join attributenames an on cda.attributeid = an.attributeid 
                  and an.localeid = 1";

$result = mysql_query($query);

while($row = mysql_fetch_assoc($result))

        {
            $categorydisplayattributes[$row['categoryId']][$row['templateType']][$row['headerId']][$row['headerName']][$row['attributeId']][$row['attributeName']] =array() ;
        }


echo "Memory After CDA:".memory_get_usage(TRUE).Line_Terminator;
exit();

クエリ結果自体は 5Mb を超えることはありませんが、チェックすると、この方法で配列に値を割り当てるとスパイクが発生します - 他の誰かがこのようなことに遭遇しましたか?

4

1 に答える 1

2
    while($row = mysql_fetch_assoc($result))


           {

//concatenate the values using '.' if string 

$index = $row['categoryId']][$row['templateType']][$row['headerId']][$row['headerName']][$row['attributeId']][$row['attributeName'];

                $categorydisplayattributes[$index] =array() ;
            }

それを試してください。

于 2012-05-16T05:05:06.037 に答える