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.6秒強かかります

なぜAPCはとても遅いのですか?

4

1 に答える 1

2

apc_sma_info() は、1 つの興味深い情報を提供します。これにより、なぜこのようなことが起こるのかを説明できる可能性があります。

シリアル化されていないデータで 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 に答える