2012-08-11 14 views
8

현재 내 응용 프로그램은 약 7MB의 메모리를 사용합니다.거대한 배열보다 더 많은 메모리 공간이 필요합니다.

strlen(serialize($array))))으로 크기를 확인하면 배열의 크기가 700KB입니다.

  • 경우 사용할 내 응용 프로그램 내에서이 배열, 및 (memory_get_peak_usage()으로) 메모리 사용량을 확인 내가 14 메가 바이트 얻을.

  • 사용하지 않으면 7MB가됩니다.

이 배열에 700KB가 직렬화되면 왜이 변수에는 PHP가 7MB가 필요합니까? 아니면 벤치 마크를 잘못하고 있습니까?

+1

이 배열/객체에는 무엇이 있습니까? 메모리에 실제 개체를 나타내려면 텍스트 버전에 필요한 것보다 훨씬 많은 할당이 필요할 수 있습니다. – Brad

+0

모든 utf8 문자와 해당 ASCII 문자의 표입니다. 좋아,하지만 10 배 이상 ?? – ellabeauty

+1

'memory_get_usage'를 사용하면 어떨까요? 'memory_get_peak_usage'는 여러분에게'peak' 사용을 보여줍니다. – zerkms

답변

10

당신이 괴롭히는 경우 PHP에서 벗어나고 싶습니다 : http://nikic.github.com/2011/12/12/How-big-are-PHP-arrays-really-Hint-BIG.html. PHP 배열은 일부 거주 공간과 같습니다.

가능하면 SplFixedArray을 사용할 수 있지만 PHP 배열에 필요한 공간에 대해 누가 신경을 쓰는지 다시 알 수 있습니다. 왜 깨끗한/성능 물건을 찾고 있다면 첫 번째 장소에서 PHP를 사용하고 있습니까? (예, 이것은 PHP 사용자로부터옵니다) :)

+1

@brad tnx! 나는 토요일 밤에 질문에 대답 할 때 당신 같은 사람들이 필요합니다. D – PeeHaa

+0

덕분에 배열을 "SplFixedArray"로 변환하려고합니다. 그러나 오랜 시간이 걸립니다 :) – ellabeauty

+2

@Petra, 괜찮습니다! 이제 우리는 단지 StackOverflow 마시는 게임이 필요합니다. – Brad

1

직렬화 된 형식은 객체를 가질 필요가 없기 때문에 메모리 최적화를 할 수 있습니다 기억 속에 존재하고 그것을 완전히 접근 할 수 있어야합니다. 데이터의 무결성만을 유지하며 접근성은 유지하지 않습니다. 이것이 당신의 질문에 조금이라도 대답하는 데 도움이된다면.

관련 문제