>  기사  >  백엔드 개발  >  대용량 XLSX 파일을 로드할 때 PHPExcel\의 메모리 사용량을 어떻게 최적화할 수 있습니까?

대용량 XLSX 파일을 로드할 때 PHPExcel\의 메모리 사용량을 어떻게 최적화할 수 있습니까?

Susan Sarandon
Susan Sarandon원래의
2024-11-25 11:13:10132검색

How Can I Optimize PHPExcel's Memory Usage When Loading Large XLSX Files?

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.