Heim > Artikel > Backend-Entwicklung > Wie kann ich PHPExcel optimieren, um Speichererschöpfung beim Laden großer XLSX-Dateien zu verhindern?
Obwohl 1024 MB RAM zugewiesen sind, stößt PHPExcel beim Laden einer 3 MB großen XSLX-Datei immer noch auf Speichererschöpfung. Die Hauptursache liegt im speicherintensiven Prozess bei der Darstellung großer Tabellenkalkulationen.
Um dieses Problem zu beheben, können verschiedene Optimierungstechniken eingesetzt werden:
Wenn nur bestimmte Arbeitsblätter geladen werden müssen, verwenden Sie setLoadSheetsOnly(), um die Anzahl der vom Leser gelesenen Blätter zu begrenzen.
$objReader->setLoadSheetsOnly([ 'Data Sheet #1', 'Data Sheet #3' ]);
Um nur bestimmte Zellen oder Zeilen abzurufen, kann ein Lesefilter verwendet werden.
class MyReadFilter implements PHPExcel_Reader_IReadFilter { // ... implementation } $objReader->setReadFilter(new MyReadFilter());
Das Lesen großer Tabellenkalkulationen in Blöcken kann den Speicherbedarf minimieren, indem nur ein Teil der Daten geladen wird einmal.
$chunkSize = 20; $chunkFilter = new chunkReadFilter(); for ($startRow = 2; $startRow < 65536; $startRow += $chunkSize) { $chunkFilter->setRows($startRow, $chunkSize); $objPHPExcel = $objReader->load($inputFileName); }
Wenn Sie readDataOnly auf „true“ setzen, werden nur Zellwerte ohne Formatierung der Daten geladen, wodurch die Speichernutzung reduziert wird.
$objReader->setReadDataOnly(true);
Cell Caching speichert Zellobjekte in einem komprimierten Format, wodurch der Speicherverbrauch erheblich reduziert wird, aber die Geschwindigkeit beeinträchtigt wird.
Anstatt Iteratoren zu verwenden und ein Array manuell zu erstellen, sollten Sie die Verwendung von toArray von PHPExcel in Betracht ziehen ()- oder rangeToArray()-Methoden für eine effiziente Array-Generierung.
Das obige ist der detaillierte Inhalt vonWie kann ich PHPExcel optimieren, um Speichererschöpfung beim Laden großer XLSX-Dateien zu verhindern?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!