Menganalisis Rentetan 30 Juta Aksara Besar
Pertemuan dengan ralat "kehabisan ingatan" boleh membingungkan apabila berurusan dengan volum data yang besar. Pertimbangkan senario ini: anda mendapatkan semula fail CSV sekitar 30.5 juta aksara menggunakan curl. Percubaan untuk membedah data ini ke dalam tatasusunan baris menggunakan kaedah biasa seperti meletup dengan r dan n mencetuskan ralat peruntukan memori yang ditakuti. Ini menimbulkan persoalan: bagaimana untuk mengelakkan ralat sedemikian sambil memanipulasi data yang luas dengan cekap?
Strategi untuk Mengelak Ralat Peruntukan Memori
Seperti yang ditunjukkan dengan bijak dalam respons sebelumnya:
Pendekatan Alternatif: Menggunakan Pembungkus Strim Tersuai
Walaupun CURLOPT_FILE berkesan menyelesaikan isu dengan menulis data pada fail, senario tertentu mungkin memerlukan dalam- pemprosesan ingatan. Dalam kes sedemikian, melaksanakan pembalut strim tersuai menyediakan penyelesaian yang berdaya maju.
Contoh Pembungkus Strim:
class MyStream { protected $buffer; function stream_open($path, $mode, $options, &$opened_path) { return true; } public function stream_write($data) { $lines = explode("\n", $data); $lines[0] = $this->buffer . $lines[0]; $this->buffer = $lines[count($lines)-1]; unset($lines[count($lines)-1]); // Perform your processing here var_dump($lines); echo '<hr />'; return strlen($data); } }
Mendaftarkan Pembungkus Strim :
stream_wrapper_register("test", "MyStream");
Menggabungkan dengan Curl:
// Configure curl using CURLOPT_FILE curl_setopt($ch, CURLOPT_FILE, fopen("test://MyTestVariableInMemory", "r+")); // Execute curl to retrieve data from the source curl_exec($ch); // Close the stream fclose($fp);
Dengan menggunakan pembalut strim tersuai, anda boleh memproses set data yang besar dalam bahagian yang boleh diurus tanpa menghadapi ralat peruntukan memori. Kaedah ini membolehkan data diproses apabila ia tiba, memastikan penggunaan memori yang cekap.
Atas ialah kandungan terperinci Bagaimana untuk Memproses Rentetan 30 Juta Aksara Besar-besaran Tanpa Kehabisan Memori?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!