我正在为某人挖掘数百万条旧日志记录的数据,并希望在这个过程中使用PHP来呈现材料,并将它们轻松地链接到现有的PHP系统。
我在终端(OSX 10.8)中运行了以下代码:
// 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个百万个数组条目?
我想象不出我何时会使用这些类型的循环进行正则表达式匹配..