PHPExcel의 메모리 소비
XSLX 테이블(3MB)의 파일 크기가 겉보기에는 커 보이지만 PHPExcel에서는 다음과 같은 이유로 로드할 수 없습니다. 메모리가 부족합니다. 이 문제는 PHPExcel이 스프레드시트 데이터에 사용하는 "인 메모리" 표현으로 인해 발생하므로 PHP 메모리 제한에 취약합니다.
메모리 사용량에 영향을 미치는 요소
실제 파일 크기 스프레드시트의 셀 수(행 x 열)와는 관련이 없습니다. 경험상 셀당 약 1k의 메모리가 필요합니다. 따라서 5M 셀 통합 문서에는 약 5GB의 메모리가 필요합니다.
메모리 최적화 기술
메모리 사용량을 최적화하기 위해 다음과 같은 여러 기술을 사용할 수 있습니다.
1. 워크시트 제한:
워크시트가 여러 개 있지만 모두 필요하지 않은 경우 setLoadSheetsOnly() 메서드를 사용하여 로드해야 하는 워크시트를 지정합니다.
2. 읽기 필터 사용:
PHPExcel_Reader_IReadFilter를 구현하는 읽기 필터 클래스를 정의하여 관심 있는 특정 셀만 읽고 메모리 사용량을 줄입니다.
3. 청크 읽기:
읽기 필터를 사용하여 한 번에 하나의 청크만 메모리에 로드되도록 통합 문서를 "청크"로 읽습니다.
4. readDataOnly 설정:
형식 정보를 무시하고 셀 값만 로드하려면 이 옵션을 활성화합니다. 이렇게 하면 메모리 소비를 크게 줄일 수 있습니다.
5. 셀 캐싱:
셀 개체를 압축된 형식으로 저장하거나 PHP 메모리 외부에 저장하여 셀당 필요한 메모리를 최소화합니다.
코드의 잠재적인 문제
이러한 최적화 기술 외에도 코드에서 반복자를 사용하는 것은 효율성이 떨어질 수 있다는 점에 주목할 가치가 있습니다. 대신 PHPExcel에서 제공하는 toArray() 또는 rangeToArray() 메서드를 사용하여 셀 데이터 배열을 얻는 것을 고려해 보세요.
위 내용은 대용량 XLSX 파일을 로드할 때 PHPExcel\의 메모리 사용량을 어떻게 최적화할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!