Wie kann ich PHPExcel optimieren, um Speichererschöpfung beim Laden großer XLSX-Dateien zu verhindern?

Susan Sarandon
Freigeben: 2024-11-19 13:58:02
Original
468 Leute haben es durchsucht

How Can I Optimize PHPExcel to Prevent Memory Exhaustion When Loading Large XLSX Files?

PHPExcel überlastet den Speicher beim Laden großer Tabellenkalkulationen

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.

Optimierung der PHPExcel-Speichernutzung

Um dieses Problem zu beheben, können verschiedene Optimierungstechniken eingesetzt werden:

Selektives Laden von Blättern

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'
]);
Nach dem Login kopieren

Lesefilter

Um nur bestimmte Zellen oder Zeilen abzurufen, kann ein Lesefilter verwendet werden.

class MyReadFilter implements PHPExcel_Reader_IReadFilter {
    // ... implementation
}

$objReader->setReadFilter(new MyReadFilter());
Nach dem Login kopieren

Chunking

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);
}
Nach dem Login kopieren

Nur ​​Daten lesen

Wenn Sie readDataOnly auf „true“ setzen, werden nur Zellwerte ohne Formatierung der Daten geladen, wodurch die Speichernutzung reduziert wird.

$objReader->setReadDataOnly(true);
Nach dem Login kopieren

Zell-Caching

Cell Caching speichert Zellobjekte in einem komprimierten Format, wodurch der Speicherverbrauch erheblich reduziert wird, aber die Geschwindigkeit beeinträchtigt wird.

Alternative Methoden

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage