6

例子:

$arr = array();

for($i = 5; $i < 300000; $i++)
    $arr[$i] = 'foo';

apc_store('data', $arr);

大约需要 15 秒。获取数据大约需要 0.7 秒。

但是如果我用 php 序列化数据并像这样存储apc_store('data', serialize($arr));它只需要 1 秒。

获取序列化数据然后反序列化,需要0.6s多一点

为什么 APC 这么慢?

4

1 回答 1

2

apc_sma_info() 提供了一个有趣的信息,也许可以解释为什么会发生。

使用非序列化数据执行 apc_store() 会在block_lists索引中产生以下值:

Array
(
    [0] => Array
        (
            [size] => 608
            [offset] => 33152
        )

    [1] => Array
        (
            [size] => 5589032
            [offset] => 11211992
        )

    [2] => Array
        (
            [size] => 2175976
            [offset] => 31378408
        )
)

在手动序列化它们时会产生:

Array
    (
        [0] => Array
            (
                [size] => 11178232
                [offset] => 33760
            )

        [1] => Array
            (
                [size] => 1210040
                [offset] => 16801024
            )

        [2] => Array
            (
                [size] => 15542104
                [offset] => 18012280
            )
    )

这很奇怪,但似乎通过手动序列化,APC 将第一个和最后一个数据块拆分为更大的块,从而更好地处理内容。

这似乎不是一件微不足道的事情,因为我运行了几次这个测试,每次都得到类似的结果。

于 2012-10-16T20:40:19.373 回答