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扩展可以提高性能,因为它是一种更有效的序列化方法