您的函数总共进行了25万次迭代,这总是要做很多PHP脚本。
但是,有些事情可以做。
首先,mt_rand()比rand()快,用它代替。其次,如果在内部循环中使用循环展开,则可能会提高一些速度。我不确定PHP在实际中的效果如何,但是您可以对其进行基准测试,看看它的效果如何。
for ($j=0;$j<$y;$j+=10) {
$r=mt_rand(0,96);
$g=mt_rand(0,128);
$b=mt_rand(0,255);
$ia[$i][$j]=ImageColorAllocate($im,$r,$g,$b);
$r=mt_rand(0,96);
$g=mt_rand(0,128);
$b=mt_rand(0,255);
$ia[$i][$j + 1]=ImageColorAllocate($im,$r,$g,$b);
$r=mt_rand(0,96);
$g=mt_rand(0,128);
$b=mt_rand(0,255);
$ia[$i][$j + 2]=ImageColorAllocate($im,$r,$g,$b);
$r=mt_rand(0,96);
$g=mt_rand(0,128);
$b=mt_rand(0,255);
$ia[$i][$j + 3]=ImageColorAllocate($im,$r,$g,$b);
$r=mt_rand(0,96);
$g=mt_rand(0,128);
$b=mt_rand(0,255);
$ia[$i][$j + 4]=ImageColorAllocate($im,$r,$g,$b);
$r=mt_rand(0,96);
$g=mt_rand(0,128);
$b=mt_rand(0,255);
$ia[$i][$j + 5]=ImageColorAllocate($im,$r,$g,$b);
$r=mt_rand(0,96);
$g=mt_rand(0,128);
$b=mt_rand(0,255);
$ia[$i][$j + 6]=ImageColorAllocate($im,$r,$g,$b);
$r=mt_rand(0,96);
$g=mt_rand(0,128);
$b=mt_rand(0,255);
$ia[$i][$j + 7]=ImageColorAllocate($im,$r,$g,$b);
$r=mt_rand(0,96);
$g=mt_rand(0,128);
$b=mt_rand(0,255);
$ia[$i][$j + 8]=ImageColorAllocate($im,$r,$g,$b);
$r=mt_rand(0,96);
$g=mt_rand(0,128);
$b=mt_rand(0,255);
$ia[$i][$j + 9]=ImageColorAllocate($im,$r,$g,$b);
}
但是,因为你正在构建的数据结构基本上是一个大的它们都将减少内存占用。
也许你正从错误的方向看待这个问题?你应该真正问自己的第一件事是,你是否真的需要这么庞大的数据结构来完成你想要做的事情?循环展开和使用更快的随机数生成器会让你的性能有所提升,但最终最快的代码是你不写的代码。任何给定算法的性能的最大因素是总是选择算法。如果你重新考虑你想要做什么,你可能会想出一些对计算机内存和处理资源的浪费少得多的东西。
你可以预填充的颜色随机列表,并从这些颜色中进行选择,而不是每次创建一个新实例。虽然,我不确定php的内存分配和收集是如何工作的。 – 2011-04-30 16:02:54
随机颜色在这里不是问题,这只是一些代码来填补阵列与问题的目的。问题在于迭代和数组占用的内存。答案中不需要覆盖颜色托盘。 – 2011-04-30 16:09:23
如果更改'$ x'和'$ y',内存使用情况如何改变? – Davidann 2011-04-30 16:13:59