Php APC序列化速度慢?

Php APC序列化速度慢?,php,arrays,serialization,apc,Php,Arrays,Serialization,Apc,例如: $arr = array(); for($i = 5; $i < 300000; $i++) $arr[$i] = 'foo'; apc_store('data', $arr); $arr=array(); 对于($i=5;$i

例如:

$arr = array();

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

apc_store('data', $arr);
$arr=array();
对于($i=5;$i<300000;$i++)
$arr[$i]=“foo”;
apc_存储('data',$arr);
大概需要15秒。获取数据大约需要0.7秒

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

要获取序列化的数据,然后对其进行反序列化,需要花费略多于0.6秒的时间

为什么APC这么慢?

APC\u sma\u info()提供了一个有趣的信息,也许可以解释为什么会发生这种情况

使用非序列化数据执行apc_store()会在块中列出以下值:

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将第一个和最后一个数据段拆分为更大的块,从而更好地处理内容


这似乎不是什么小事,因为我运行了几次这个测试,每次都得到类似的结果。

apc\u store()
触发
\u sleep()
函数,对吗?如果这是真的,那么答案是肯定的。也许这会降低效率。这听起来也像是
apc\u store()
覆盖了现有条目。。。当然,我仍在学习PHP,所以我可能还远远不够。@MikeDtrick:APC不使用序列化。它只是复制整个
zval
结构(在C级)。@Crozin等等,什么?这是否与触发apc_sleep()有关?“不对吗?”米凯德瑞克对不起,我错了。APC触发
\uuu sleep()
method.APC会序列化它存储的任何用户数据:对于对象,这会触发\uu sleep()。。。。调用apc_store之前的预序列化将创建要存储的字符串;APC将对其进行重新序列化。使用igbinary扩展可以提高性能,因为它是一种更有效的序列化方法