gpt4 book ai didi

php - SplFixedArray::fromArray - 与 native 固定数组一样高效的内存? PHP 5.3.5

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:01:42 25 4
gpt4 key购买 nike

我正在试验 SplFixedArray。我用动态数组完成了一些工作,我试图将其转换为内存效率更高的固定数组(有限的 RAM 可以使用)。

阅读一些 PHP 文档,在标题中找到该函数并继续仅应用于如下数组:

$array[x][y]['field']

(以字符串为索引的 3d 数组,在固定数组中是不可能的)通过做

$testArray =  SplFixedArray::fromArray(generateArray(256)); 
// generateArray is a function to create the array and set it to zero.

我检查了我是否可以从这个与标准数组相比节省一些内存,但没有。用数字替换字符串索引,使用相同数量的 ram (94 mb) 来生成数组。

如果我正确使用 SplFixedArray(不是从现有数组转换),我会将使用的内存降低到 74mb,但是我有很多函数和例程可以与基本 3d 数组一起使用,转换起来会很麻烦一切都到“适当的”固定数组。这就是为什么当我读到 SPL::fromArray 时我跳到椅子上的原因。但是通过这些测试,我发现零内存和速度优势。

我没有正确使用它吗?此功能是否仅适用于其他类型的东西?

谢谢!

最佳答案

简而言之,PHP 的设计目的不是为了以内存高效的方式处理如此大的数据结构。你所做的任何事情都不会改变这一点。尝试在 256MB 的 VPS 中运行 PHP 非常困难,尤其是当您有 Web 服务器和数据库服务器时。

正如我在您的 other question 中所说明的那样, SplFixedArrays 使用更少的内存。这是事实,您可以在 PHP 源代码中查找这些对象是如何创建的。数字不会说谎。

但这只是难题的一部分...如果您在数组中存储大量大数据或正在使用其他数据结构,则数组可能不是内存使用的“瓶颈”。

关于 SplFixedArray::fromArray(),您肯定会增加使用高峰,因为您现在正在创建两个数组结构。如果您删除临时数组,您将使用更少的内存……但在此期间,您将使用更多内存。

如果您只是编写自己的函数将临时数组的一个元素一个一个地移出并将其添加到 SplFixedArray,那么您可能会使用更少的峰值内存,因为您不会复制数据结构的大小。 (由于写时复制,实际节省的可能不会那么多。)

同样,一些 1024*1024 大小数组的基准测试,每个槽中有 64 位整数:

SplFixedArray:            92,914,280
array: 218,756,976
SplFixedArray::fromArray 227,147,408 peak, 92,915,088 after

因此如您所见,如果您从Array 加载,您正在使用更多的内存,但是在临时数组被删除之后,它又回到了节省的空间。但由于目标是最大限度地减少峰值内存使用量,因此使用 fromArray 会比简单地使用数组更糟糕。

关于php - SplFixedArray::fromArray - 与 native 固定数组一样高效的内存? PHP 5.3.5,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6381431/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com