在每篇关于 SimpleXML 性能和内存使用的文章中都提到,所有解析的内容都存储在内存中,处理大文件会导致大量内存使用。但是最近我发现使用 SimpleXML 处理大文件不会导致大量内存使用,甚至几乎不会导致内存使用。有我的测试脚本:
<?php
error_reporting(E_ALL);
ini_set("display_errors", 1);
print "OS: " . php_uname() . "\n";
print "PHP version: " . phpversion() . "\n";
print round(memory_get_usage() / 1024 / 1024, 2) . " Mb\n";
$large_xml = '<?xml version="1.0" encoding="UTF-8"?><catalog><products>';
for ($i = 0; $i < 500000; $i++) {
$large_xml .= "<product><id>{$i}</id><name>Product Name {$i}</name><description>Some Description {$i}</description><price>{$i}</price></product>\n";
}
$large_xml .= "</products></catalog>";
print round(memory_get_usage() / 1024 / 1024, 2) . " Mb\n";
$products_sxml = simplexml_load_string($large_xml);
print round(memory_get_usage() / 1024 / 1024, 2) . " Mb\n";
?>
我在 Linux 服务器上测试这个脚本,PHP 版本:5.3.8,输出是:
操作系统:Linux 2.6.32-5-amd64 #1 SMP Mon Feb 25 00:26:11 UTC 2013 x86_64
PHP版本:5.3.8
0.6 MB
65.98 MB
65.98 MB
所以我的问题是 - 有没有其他人注意到它,对此有什么解释,因为我在网络上的任何地方都找不到它的解释 - 甚至没有关于它的确认?