【问题标题】:Array Assignment Performance数组分配性能
【发布时间】:2013-08-25 21:14:36
【问题描述】:

我看到this 的帖子,但不太明白,也没有完全回答我的问题。另外 - 似乎表明数组速度较慢。我想:那不可能是!

在其他条件相同的情况下,以速度为目标,在数组中分配变量的最佳方法是什么?

这样更好吗:

$part1 = "a";
$part2 = "b";
$part3 = "c";
$part4 = "d";

(当然,我知道这不允许您像处理数组那样与数据交互,但假设您不需要。)

这样更好吗:

$part[1] = "a";
$part[2] = "b";
$part[3] = "c";
$part[4] = "d";

这样更好吗:

$part = array("a","b","c","d");

还是别的什么?为什么一个比另一个更好的背后机制是什么?

另外 - 它是否取决于分配的元素数量?当谈到多维数组、不同的数据类型或不同的语言时,答案会如何变化?另外,如果我初始化数组然后向它添加元素,它会改变吗?

【问题讨论】:

标签: php arrays


【解决方案1】:

一个数组就是一个数组,不管你如何指定或分配变量给它。一旦你创建了一个数组,它就会被放入内存中(除非你使用SplFixedArray)并且内存中的数组增长得非常快。

看看这篇文章,它更深入地研究了资源密集型数组是如何产生的:http://nikic.github.io/2011/12/12/How-big-are-PHP-arrays-really-Hint-BIG.html

来自文章:

在这篇文章中,我想研究 PHP 数组的内存使用情况(以及 一般值)使用以下脚本作为示例,其中 创建 100000 个唯一的整数数组元素并测量 产生的内存使用情况:

<?php
$startMemory = memory_get_usage();
$array = range(1, 100000);
echo memory_get_usage() - $startMemory, ' bytes';

您希望它是多少?很简单,一个整数是 8 个字节(在 64 位 unix 机器并使用长类型),你得到了 100000 个整数,所以你 显然将需要 800000 字节。这大约是 0.76 MB。

现在尝试运行上面的代码。如果你愿意,你可以在网上做。这 给我 14649024 字节。是的,你没听错,那是 13.97 MB - 比我们估计的多十八倍。

【讨论】:

  • 哎呀!!那么这是否意味着如果我有能力 - 我应该只使用单个变量?和上面的第一个例子一样?
  • 另外,对于上面的文章,或者我从中得到的东西是一个 tl;dr:PHP 是动态和灵活的,因此会影响速度和效率。它必须运行许多单独的进程来处理数组,因此需要大量内存。感谢您的链接!
猜你喜欢
  • 2011-11-13
  • 2014-08-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-05
  • 1970-01-01
  • 1970-01-01
  • 2014-05-18
相关资源
最近更新 更多