schneespur/vendor/league/csv/src/WriterBench.php
Michael ee3dbba6cc Initial release v1.0.0
Schneespur — Open-source winter service documentation software (PWA + Admin).
GPS tracking via OwnTracks, weather data, photo evidence, and legally
compliant service records for winter maintenance operators.

License: AGPL-3.0-or-later
2026-05-17 13:33:51 +00:00

60 lines
1.8 KiB
PHP

<?php
/**
* League.Csv (https://csv.thephpleague.com)
*
* (c) Ignace Nyamagana Butera <nyamsprod@gmail.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
declare(strict_types=1);
namespace League\Csv;
use PhpBench\Attributes as Bench;
use SplFileObject;
use function assert;
final class WriterBench
{
#[Bench\OutputTimeUnit('seconds')]
#[Bench\Assert('mode(variant.mem.peak) < 2097152'), Bench\Assert('mode(variant.time.avg) < 10000000')]
public function benchWriting1MRowsCSVUsingFileObject(): void
{
$numRows = 1_000_000;
$path = dirname(__DIR__).'/test_files/csv_write_with_one_million_rows.csv';
$writer = Writer::from(new SplFileObject($path, 'w'));
for ($i = 1; $i <= $numRows; ++$i) {
$writer->insertOne(["csv--{$i}1", "csv--{$i}2", "csv--{$i}3"]);
}
assert($numRows === $this->getNumWrittenRows($path));
}
#[Bench\OutputTimeUnit('seconds')]
#[Bench\Assert('mode(variant.mem.peak) < 2097152'), Bench\Assert('mode(variant.time.avg) < 10000000')]
public function benchWriting1MRowsCSVUsingStream(): void
{
$numRows = 1_000_000;
$path = dirname(__DIR__).'/test_files/csv_write_with_one_million_rows.csv';
$writer = Writer::from($path, 'w');
for ($i = 1; $i <= $numRows; ++$i) {
$writer->insertOne(["csv--{$i}1", "csv--{$i}2", "csv--{$i}3"]);
}
assert($numRows === $this->getNumWrittenRows($path));
}
private function getNumWrittenRows(string $resourcePath): int
{
$lineCountResult = shell_exec("wc -l {$resourcePath}");
assert(false !== $lineCountResult);
return (int) $lineCountResult;
}
}