Rumah >pembangunan bahagian belakang >tutorial php >Bagaimanakah Saya Boleh Mengoptimumkan PHPExcel untuk Mengelakkan Keletihan Memori Apabila Memuatkan Fail XLSX Besar?

Bagaimanakah Saya Boleh Mengoptimumkan PHPExcel untuk Mengelakkan Keletihan Memori Apabila Memuatkan Fail XLSX Besar?

Susan Sarandon
Susan Sarandonasal
2024-11-19 13:58:02588semak imbas

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

PHPExcel Membebankan Memori Semasa Memuatkan Hamparan Besar

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.

Mengoptimumkan Penggunaan Memori PHPExcel

Untuk menangani isu ini, beberapa teknik pengoptimuman boleh digunakan:

Pemuatan Helaian Terpilih

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

Baca Penapis

Untuk mendapatkan semula sel atau baris tertentu sahaja, penapis baca boleh digunakan.

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

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

Chunking

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

Baca Data Sahaja

Menetapkan readDataOnly kepada benar memuatkan nilai sel sahaja tanpa memformat data, mengurangkan penggunaan memori.

$objReader->setReadDataOnly(true);

Caching Sel

Caching sel menyimpan objek sel dalam format termampat, mengurangkan penggunaan memori dengan ketara tetapi mengorbankan kelajuan.

Kaedah Alternatif

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn