PHP 프로그램의 메모리 사용을 효율적으로 최소화하면서 프로그래밍하는 방법을 소개하고 최소 메모리를 사용하여 프로그램 결과를 생성 할 수 있습니까?PHP에서 메모리의 각 비트를 민감하게 사용하는 방법
답변
나는 당신의 질문을 어떻게 읽었는지에 따라, 나는 PHP로 틀린 나무를 짖고 있다고 생각한다. 낮은 메모리 오버 헤드를 위해 설계된 적이 없었습니다.
가능한 한 효율적 이길 원한다면 다른 답변을보십시오. 모든 단일 변수에는 상당한 메모리가 필요하므로 기억해야하는 것만 사용해야하며 가비지 수집기가 작동하도록하십시오. 프로그램이 해당 범위를 벗어날 때 GC'd를 얻을 수 있도록 변수를 로컬 범위에서만 선언해야합니다. 객체는 스칼라 변수보다 비쌉니다. 그러나 내가 보는 가장 큰 공통적 인 학대는 여러 데이터 사본입니다. 배열이 큰 경우 operate directly on it rather than copying it (CPU 효율은 낮지 만 메모리 효율은 높아야 함).
메모리가 부족한 환경에서 실행하려면 다른 언어를 사용하는 것이 좋습니다. PHP는 변수와 관련하여 모든 것을 관리하기 때문에 좋습니다. 그러나 이러한 유형의 조정 및 유연성은 가격 (속도 및 메모리 사용량)에 달려 있습니다. 각 변수에는 많은 메타 데이터가 저장되어 있어야합니다. 따라서 8 바이트 int (32 비트)는 C에서 저장하기 위해 8 바이트를 취할 것이며, PHP에서 64 바이트 이상을 차지할 것입니다 (유형, 이름, 범위 지정 정보 등과 같은 모든 "추적 정보" 기타). 이 오버 헤드는 PHP가 대용량 메모리로드를 위해 설계되지 않았기 때문에 일반적으로 ok로 간주됩니다. 따라서 그것은 절충점입니다. 쉬운 프로그래밍에 더 많은 메모리가 사용됩니다.그러나 메모리 제약 조건이 빡빡하다면 다른 언어로 이동하는 것이 좋습니다 ...
당신이하려고하는 것과 메모리 사용이 왜 문제가되는지에 대한 정보가 거의 없기 때문에 조언하기가 어렵습니다. 일반적인 시나리오 (많은 요청을 처리하는 웹 서버)에서 메모리는 제한적인 공장이 아니므로 속도를 위해 메모리를 희생한다고하더라도 가능한 한 빨리 요청을 처리하는 것이 좋습니다.
그러나, 다음과 같은 일반적인 지침이 적용
unset
당신의 변수를 즉시 당신이 그들을 필요로하지 않는. 잘 작성된 프로그램에서는 범위를 벗어나는 변수가 동일한 효과를 갖기 때문에 이것이 큰 영향을 미치지는 않습니다.- 순환 참조가있는 많은 변수가있는 장기 실행 스크립트 및 PHP 5.3을 사용하는 경우 특정 시점에서 가비지 수집기를 명시 적으로 호출합니다.
우선 : 참조를 사용하여 메모리 사용을 최적화하지 마십시오. 당신이 그것에 쓸 때
$array = array(1,2,3,4,5,);
$var = $array;
PHP는 변수의 내용을 복사합니다 : PHP는이 같은 일을 할 경우 변수의 내용을 복사 않을만큼 똑똑하다.)
그러나 나는 당신의 질문이 당신이 더 정확하다면 대답하기가 어렵다고 생각합니다.
예를 들어 파일 작업을하는 경우 파일 전체를 file_get_contents()
으로 항상 지정할 필요는 없지만 f (open | ...) 함수를 사용하여 파일의 작은 부분 만 한 번에로드하거나 전체를 건너 뛰기도 할 수 있습니다 덩어리.
또는 문자열로 작업하는 경우 가능한 경우 나머지 문자열 대신 문자열 오프셋 (예 : strpbrk 대신 strcspn)을 반환하는 함수를 사용합니다.
- 1. 앱이 사용하는 메인 메모리의 양을 알려주는 방법
- 2. DBIx를 사용하여 mysql 비트를 사용하는 방법
- 3. PHP에서 모니터를 사용하는 방법?
- 4. PHP에서 RegexIterator를 사용하는 방법
- 5. PHP에서 zval을 사용하는 방법?
- 6. PHP에서 역 참조를 사용하는 방법
- 7. 프로세스가 리눅스에서 사용하는 메모리의 페이지 수를 확인하십시오.
- 8. PHP에서 mysql 덤프를 사용하는 방법
- 9. PHP에서 portable imagemagick을 사용하는 방법
- 10. MIPS에서 LSB 비트를 얻는 방법?
- 11. 각 사용자에 대해 일련의 고유 한 비트를 할당하는 알고리즘?
- 12. Watin 64 비트를 MSIE 32 비트와 함께 사용하는 방법
- 13. PHP에서 각 사용자 (세션?)의 실제 고유 번호를 만드는 방법
- 14. Eclipse에서 32 비트를 컴파일하는 방법
- 15. NSString의 각 단어를 대문자로 사용하는 방법
- 16. jQuery jQuery 각 루프를 아약스 사용하는 방법
- 17. 선형 배열보다 비트 배열의 비트를 분할하는 방법
- 18. 메모리의 연관 배열 조회
- 19. 메모리의 대형 도메인 모델
- 20. 특정 사용자의 PHP에서 exec 함수를 사용하는 방법
- 21. PHP에서 textdomain 관련 함수를 사용하는 방법?
- 22. PHP에서 간단한 xml 객체를 사용하는 방법
- 23. PHP에서 CBC 암호화 모드를 사용하는 방법
- 24. PHP에서 다른 URL 구조를 사용하는 방법?
- 25. PHP에서 Olson 표준 시간대 데이터베이스를 사용하는 방법?
- 26. 자바 캐시 메모리의 힙 크기를 늘리는 방법
- 27. 바이트 배열에서 얼마나 많은 비트를 확인하는 방법?
- 28. RGB 레이어에서 2^12 비트를 숨기는 방법
- 29. float의 비트를 int로 다시 해석하는 방법
- 30. System.Decimal 비트를 C#으로 문자열로 변환하는 방법?