我有一个脚本将 803*803(644809)每个图表内有 1 000 000 个值。使用 ~500*500 一切正常 - 但现在它崩溃了 - 它尝试分配超过 64MB 的内存(我没有)。解决办法是什么?以某种方式“分裂”它还是......?
$result=mysql_query("SELECT * FROM some_table", $connection);
confirm($result);
while($rows = mysql_fetch_array($result)){
$result2=mysql_query("SELECT * FROM some_table", $connection);
confirm($result2);
while($rows2 = mysql_fetch_array($result2)){
$first = $rows["something"];
$second = $rows2["something2"];
$graph[$first][$second] = 1000000;
}
}
*这是关于Dijkstra算法的
附:不,我can't分配超过 64MB
尝试在每个循环结束时释放内部 sql 结果,使用mysql_free_result($result2);
,PHP 脚本可能无法为您执行此操作,具体取决于 PHP 版本(垃圾收集器可能未启用,或者由于 PHP 版本太旧而可能无用)。
不要在循环内实例化这两个临时变量,直接使用 mysqli_fetch_array 结果,例如$graph[$rows["something"]][$rows2["something2"]] = 1000000;
,每个循环将节省 2 个内存分配。
PS:这是micro-优化,因此它可以帮助您节省足够的内存以适应您的64M内存。不要忘记,对于 64 * 1024 * 1024 字节的内存,您的 644 809 个元素中的每个元素的平均最大大小为 104 字节,加上数组大小本身,加上您可能为算法分配的其余临时数据。
如果不合适,请考虑拆分矩阵并执行批处理作业等,以减少内存消耗但运行多个脚本来拆分工作。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)