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

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

Susan Sarandon
Susan SarandonOriginal
2024-11-19 13:58:02471Durchsuche

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'
]);

Lesefilter

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

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

$objReader->setReadFilter(new MyReadFilter());

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);
}

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);

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!

Stellungnahme:
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