クエリから返された値を保持する配列を作成しています - 多次元配列に追加すると、スクリプトが最大 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 を超えることはありませんが、チェックすると、この方法で配列に値を割り当てるとスパイクが発生します - 他の誰かがこのようなことに遭遇しましたか?