Walaupun mempunyai 1024MB RAM yang diperuntukkan, PHPExcel masih mengalami keletihan memori apabila memuatkan fail XSLX 3MB. Punca utama terletak pada proses intensif memori yang terlibat dalam mewakili hamparan besar.
Untuk menangani isu ini, beberapa teknik pengoptimuman boleh digunakan:
Jika hanya lembaran kerja tertentu perlu dimuatkan, gunakan setLoadSheetsOnly() untuk mengehadkan bilangan helaian yang dibaca oleh pembaca.
$objReader->setLoadSheetsOnly([ 'Data Sheet #1', 'Data Sheet #3' ]);
Untuk mendapatkan semula sel atau baris tertentu sahaja, penapis baca boleh digunakan.
class MyReadFilter implements PHPExcel_Reader_IReadFilter { // ... implementation } $objReader->setReadFilter(new MyReadFilter());
Membaca hamparan besar dalam ketulan boleh meminimumkan jejak memori dengan hanya memuatkan sebahagian daripada data pada satu masa.
$chunkSize = 20; $chunkFilter = new chunkReadFilter(); for ($startRow = 2; $startRow < 65536; $startRow += $chunkSize) { $chunkFilter->setRows($startRow, $chunkSize); $objPHPExcel = $objReader->load($inputFileName); }
Menetapkan readDataOnly kepada benar memuatkan nilai sel sahaja tanpa memformat data, mengurangkan penggunaan memori.
$objReader->setReadDataOnly(true);
Caching sel menyimpan objek sel dalam format termampat, mengurangkan penggunaan memori dengan ketara tetapi mengorbankan kelajuan.
Daripada menggunakan iterator dan membina tatasusunan secara manual, pertimbangkan untuk menggunakan kaedah toArray() atau rangeToArray() PHPExcel untuk cekap penjanaan tatasusunan.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengoptimumkan PHPExcel untuk Mengelakkan Keletihan Memori Apabila Memuatkan Fail XLSX Besar?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!