PHPExcel phân bổ khá nhiều bộ nhớ
Trong khi PHPExcel là một thư viện đẹp, sử dụng nó có thể yêu cầu một lượng lớn bộ nhớ phân bổ cho PHP.
Theo this thread, chỉ 5 tế bào có thể làm cho 6 MByte sử dụng bộ nhớ:
<?php
require_once 'php/PHPExcelSVN/PHPExcel/IOFactory.php';
$objPHPExcel = PHPExcel_IOFactory::load("php/tinytest.xlsx");
$objPHPExcel->setActiveSheetIndex(0);
$objPHPExcel->getActiveSheet()->setCellValue('D2', 50);
echo $objPHPExcel->getActiveSheet()->getCell('D8')->getCalculatedValue() . "
";
echo date('H:i:s') . " Peak memory usage: " . (memory_get_peak_usage(true)/1024/1024) . " MB\r\n";
?>
I get 6MB of memory usage.
Một khung cảnh user even failed with a 256MByte memory.
Trong khi PHPExcel cung cấp các cách để giảm bớt dung lượng bộ nhớ của nó, tất cả các khoản giảm đều trở nên quá nhỏ trong trường hợp của tôi. This page on github cung cấp chi tiết về các tùy chọn quản lý bộ nhớ cache của PHPExcel. Ví dụ, thiết lập này serializes và GZIPs các tế bào cấu trúc của một bảng tính:
$cacheMethod = PHPExcel_CachedObjectStorageFactory::cache_in_memory_gzip;
PHPExcel_Settings::setCacheStorageMethod($cacheMethod);
PHPExcel's FAQ giải thích điều này:
Fatal error: Allowed memory size of xxx bytes exhausted (tried to allocate yyy bytes) in zzz on line aaa
PHPExcel holds an "in memory" representation of a spreadsheet, so it is susceptible to PHP's memory limitations. The memory made available to PHP can be increased by editing the value of the memorylimit directive in your php.ini file, or by using iniset('memory_limit', '128M') within your code (ISP permitting);
Some Readers and Writers are faster than others, and they also use differing amounts of memory. You can find some indication of the relative performance and memory usage for the different Readers and Writers, over the different versions of PHPExcel, here http://phpexcel.codeplex.com/Thread/View.aspx?ThreadId=234150
If you've already increased memory to a maximum, or can't change your memory limit, then this discussion on the board describes some of the methods that can be applied to reduce the memory usage of your scripts using PHPExcel http://phpexcel.codeplex.com/Thread/View.aspx?ThreadId=242712
kết quả đo cho PHP Excel
tôi instrumented các PHPExcel ví dụ: [01simple.php][5]
và đã thực hiện một số thử nghiệm nhanh .
Tiêu thụ 92 Kbyte:
for($n=0; $n<200; $n++) {
$objPHPExcel->setActiveSheetIndex(0) ->setCellValue('A' . $n, 'Miscellaneous glyphs');
}
Tiêu thụ 4164 KBytes:
for($n=0; $n<200; $n++) {
$objPHPExcel->setActiveSheetIndex(0) ->setCellValue('A' . $n, 'Miscellaneous glyphs');
$objPHPExcel->getActiveSheet()->getStyle('A' . $n)->getAlignment()->setWrapText(true);
}
Nếu một thực thi đoạn này nhiều lần thay đổi, mỗi mảnh tiêu thụ khoảng 4 MByte.
Kiểm tra ứng dụng của bạn một cách logic đúng
Để đảm bảo rằng ứng dụng của bạn một cách logic đúng, tôi muốn đề nghị để tăng bộ nhớ PHP đầu tiên:
ini_set('memory_limit', '32M');
Trong trường hợp của tôi, tôi phải xuất để xuất dữ liệu kết quả của một ứng dụng đánh giá trực tuyến.Trong khi có ít hơn 100 ô theo chiều ngang, tôi cần xuất tối đa 10.000 hàng. Trong khi số lượng ô lớn, mỗi ô của tôi giữ một số hoặc một chuỗi gồm 3 ký tự - không có công thức, không có kiểu.
Trong trường hợp hạn chế bộ nhớ mạnh hoặc bảng tính lớn
Trong trường hợp của tôi, không ai trong số các tùy chọn bộ nhớ cache giảm số tiền càng nhiều càng tốt yêu cầu. Thêm vào đó, thời gian chạy của ứng dụng tăng lên rất nhiều.
Cuối cùng, tôi phải chuyển sang xuất tệp tin CSV-dữ liệu cũ.
Vì PHPExcel không áp đặt bất kỳ giới hạn nào về số kiểu (mặc dù Excel tự thực hiện, nó cao hơn 20) và một số tập lệnh demo trong thư mục/Examples sử dụng hơn 20 kiểu khác nhau, bạn có thể vui lòng cung cấp ví dụ về mã hoạt động thể hiện vấn đề này không. Nó có thể là vấn đề là trong một phong cách cụ thể mà bạn đang thiết lập chứ không phải là sau một số phong cách. –
'$ this' trong câu hỏi của bạn là gì và' $ coords' trong câu hỏi của bạn là gì và phần còn lại của ví dụ tối thiểu để tái tạo vấn đề của bạn ở đâu? http://meta.stackexchange.com/questions/22754/sscce-how-to-provide-examples-for-programming-questions – hakre