- round: documentation ( source)
- memory_get_usage: documentation ( source)
<?php
class IteratorWithFilter
{
public $generator;
public function __construct(array $data)
{
$this->generator = new \ArrayIterator($data);
}
public function filter(Closure $closure)
{
$closure = clone $closure;
$closure = $closure->bindTo($this);
$this->generator = new \CallbackFilterIterator($this->generator, $closure);
return $this;
}
}
function createIterator(Closure $closure) {
$iter = new IteratorWithFilter([['a'], ['b']]);
return $iter->filter($closure);
}
function createClosure() {
return function ($row) {
return true;
};
}
$closure = createClosure();
for ($i = 0; $i < 50 * 1000; $i++) {
createIterator($closure);
if (($i % 1000) === 0) {
// gc_collect_cycles(); // explicit GC does not help...
echo round(memory_get_usage() / (1024 * 1024), 3) . " MiB\n";
}
}