PHPSReadSheet突然变得非常缓慢——生成的电子表格少于5000行

PHPSReadSheet突然变得非常缓慢——生成的电子表格少于5000行,php,performance,phpexcel,phpspreadsheet,Php,Performance,Phpexcel,Phpspreadsheet,突然,PHPSpreadsheet非常慢。我正在构建一个30列宽、不到5000行的电子表格。我于2020年3月23日从1.10.1升级到1.11.0。因此,如果这是一个问题,从那时起,我只是刚刚注意到 我可以确认查询的执行并迭代结果(同时将结果存储在二维数组中)所需的时间不到一秒钟 似乎几乎所有的时间都花在这三条线上: $activeSheet->fromArray($finalArray, NULL, 'A2'); //Well over a minute 及 及 与PHPSRead

突然,PHPSpreadsheet非常慢。我正在构建一个30列宽、不到5000行的电子表格。我于2020年3月23日从1.10.1升级到1.11.0。因此,如果这是一个问题,从那时起,我只是刚刚注意到

我可以确认查询的执行并迭代结果(同时将结果存储在二维数组中)所需的时间不到一秒钟

似乎几乎所有的时间都花在这三条线上:

$activeSheet->fromArray($finalArray, NULL, 'A2');  //Well over a minute

与PHPSReadSheet相关的我的代码:

$spreadsheet = new PhpOffice\PhpSpreadsheet\Spreadsheet();
$spreadsheet->setActiveSheetIndex(0);
$activeSheet = $spreadsheet->getActiveSheet();

$activeSheet->SetCellValue('A1', $columnNames['Column 1']);
$activeSheet->SetCellValue('B1', $columnNames['Column 2']);
...
$activeSheet->SetCellValue('AD1', $columnNames['Column 30']);
$activeSheet->fromArray($finalArray, NULL, 'A2'); // $finalArray is a 2 dimensional array with my data (position based, not using named keys) 
$activeSheet->setTitle('My Worksheet');

$activeSheet->getStyle("A1:AD1")->getFont()->setBold(true);

$objWriter = new PhpOffice\PhpSpreadsheet\Writer\Xlsx($spreadsheet);

header('Content-Disposition: attachment; filename="My Export.xlsx"');
header('Content-type: application/vnd.ms-excel');
$objWriter->save('php://output');
xdebug概要文件跟踪显示90%的时间都花在
PhpOffice\PhpSpreadsheet\Worksheet\Worksheet->fromArray
上。我还看到使用145 MB内存的
PhpOffice\PhpSpreadsheet\Worksheet\Worksheet->getCell
,以及使用101 MB内存的
PhpOffice\PhpSpreadsheet\Worksheet\Worksheet->createNewCell
。这两个调用在
->fromArray
调用中的某个地方调用

我相信我正在使用建议的方法来提高其他问题中提到的性能。但在大多数问题中,他们在比我多很多行的电子表格上存在性能问题。此外,由于我的xDebug概要文件跟踪是500MB大(是的,MB,半gig),所以似乎有些问题


我还能做些什么来提高性能吗?我做错什么了吗?考虑到数据量,这种行为非常不寻常吗?

有什么想法吗??这里也有同样的问题。不,我从来没想过。我最终使用本机RPG来提供导出。然而,跟踪显示,调用PHP的
iconv
函数花费了大量时间。有一段时间我想,如果我指定我的单元格的数据类型,这样我就可以消除这些调用,但我没有成功@胡思乱想??这里也有同样的问题。不,我从来没想过。我最终使用本机RPG来提供导出。然而,跟踪显示,调用PHP的
iconv
函数花费了大量时间。有一段时间我想,如果我指定我的单元格的数据类型,这样我就可以消除这些调用,但我没有成功@卡克德
$objWriter->save('php://output'); // About a minute
$spreadsheet = new PhpOffice\PhpSpreadsheet\Spreadsheet();
$spreadsheet->setActiveSheetIndex(0);
$activeSheet = $spreadsheet->getActiveSheet();

$activeSheet->SetCellValue('A1', $columnNames['Column 1']);
$activeSheet->SetCellValue('B1', $columnNames['Column 2']);
...
$activeSheet->SetCellValue('AD1', $columnNames['Column 30']);
$activeSheet->fromArray($finalArray, NULL, 'A2'); // $finalArray is a 2 dimensional array with my data (position based, not using named keys) 
$activeSheet->setTitle('My Worksheet');

$activeSheet->getStyle("A1:AD1")->getFont()->setBold(true);

$objWriter = new PhpOffice\PhpSpreadsheet\Writer\Xlsx($spreadsheet);

header('Content-Disposition: attachment; filename="My Export.xlsx"');
header('Content-type: application/vnd.ms-excel');
$objWriter->save('php://output');