【发布时间】:2010-09-01 11:02:11
【问题描述】:
我正在处理大型 XML 文件(几兆字节),我必须对其进行各种检查。但是,我的内存和时间使用量增长非常快。我已经这样测试过:
$xml = new SimpleXMLElement($string);
$sum_of_elements = (double)0.0;
foreach ( $xml->xpath('//Amt') as $amt ) {
$sum_of_elements += (double)$amt;
}
使用 microtime() 和 memory_get_usage() 函数,我通过运行此代码得到以下结果:
- 5Mb 文件(7480 个 Amt 元素):
- 执行时间 0,69s
- 内存使用量从 10.25Mb 增长到 29.75Mb
这还不错。但是随着文件内存和时间使用量的增加,会大大增加:
- 6Mb 文件(8976 个 Amt 元素):
- 执行时间 8.53s
- 内存使用量从 10.25Mb 增长到 99.25Mb
问题似乎在于循环结果集。我也尝试过 for-loop 而不是 foreach 但没有区别。如果不循环,内存使用量不会增长太多。
知道问题出在哪里吗?
【问题讨论】: