我正在为某人对数百万个旧日志条目进行数据挖掘,并且真的想在这件事上使用 PHP 来提供材料,以便轻松地将它们链接到现有的 PHP 系统。
我在终端(OSX 10.8)的 PHP 5.4.4 中运行此代码:
// Settings
ini_set('error_reporting', E_ALL); // Shows all feedback from the parser for debugging
ini_set('max_execution_time', 0); // Changes the 30 seconds parser exit to infinite
ini_set('memory_limit', '512M'); // Sets the memory that may be used to 512MegaBytes
echo 'Start memory usage: '.(memory_get_usage(TRUE) / 1024)."\n";
$x = Array();
for ($i = 0; $i < 1e7; $i++) {
$x[$i] = 1 * rand(0, 10);
//unset($x[$i]);
}
echo 'End memory usage: '.(memory_get_usage(TRUE) / 1024)."\n";
echo 'Peak memory usage: '.(memory_get_peak_usage(TRUE) / 1024)."\n";
这是一千万次循环的简单测试。与在 Python 中使用字典相比,泄漏真的很糟糕 :(。
当我取消引用 unset() 函数来测试用法时,它立即变成了独角兽和彩虹。所以强制释放内存似乎进展顺利。
有什么办法我仍然可以在 512M 内存限制内维护 10-50 百万个数组条目?
我也无法想象我什么时候会用这些循环做一些正则表达式..