function () use ($rows, $makeRow, $dir) { $data = []; for ($r = 0; $r < $rows; $r++) { $data[] = $makeRow(); } (new FastExcel(collect($data)))->export($dir.'/collection.xlsx'); }, // Streamed row by row through a generator. 'generator' => function () use ($rows, $makeRow, $dir) { $gen = (function () use ($rows, $makeRow) { for ($r = 0; $r < $rows; $r++) { yield $makeRow(); } })(); (new FastExcel($gen))->export($dir.'/generator.xlsx'); }, default => throw new InvalidArgumentException("Unknown mode: {$mode}"), }; $result = bench($iterations, $callback); array_map('unlink', glob($dir.'/*')); rmdir($dir); printf(' FastExcel (%-10s) %7.3f s %8.1f MB peak', $mode, $result['avg_s'], $result['peak_mb']); function bench(int $iterations, callable $callback): array { $times = []; $peak = 0; for ($i = 0; $i < $iterations; $i++) { gc_collect_cycles(); if (function_exists('memory_reset_peak_usage')) { memory_reset_peak_usage(); } $start = hrtime(true); $callback(); $times[] = (hrtime(true) - $start) / 1e9; $peak = max($peak, memory_get_peak_usage(true)); } return [ 'avg_s' => round(array_sum($times) / count($times), 3), 'peak_mb' => round($peak / 1048576, 1), ]; }