나는 PHP 5.3 스크립트로 메모리 할당에 의문을 가지고 있습니다.) (정적 var 및 함수 : PHP에서 메모리 할당
for($i = 0; $i < 200000; $i++) {
echo "Pre-data1 Test:\n\t" . memory_get_usage(true) . "\n";
Test::getTestData1();
echo "Post-data1 Test:\n\t" . memory_get_usage(true) . "\n";
}
for($i = 0; $i < 200000; $i++) {
echo "Pre-data2 Test:\n\t" . memory_get_usage(true) . "\n";
Test::getTestData2();
echo "Post-data2 Test:\n\t" . memory_get_usage(true) . "\n";
}
내가 호출이 :: getTestData1을 테스트 할 수 있다고 가정 수 있습니다
class MyData {
private static $data = null;
public static function getData() {
if(self::$data == null)
self::$data = array(1,2,3,4,5,);
return self::$data;
}
}
class Test {
private static $test_data = null;
public static function getTestData1() {
if(self::$test_data==null) {
self::$test_data = MyData::getData();
self::$test_data[] = 6;
}
return self::$test_data;
}
public static function getTestData2() {
$test = MyData::getData();
$test[] = 6;
return $test;
}
}
그리고 간단한 test.php 스크립트 : 당신이 추천 정적 클래스 (을 MyData 및 테스트)가 상상 Test :: getTestData2()는 함수 반환시 $ test (정적 변수의 복사본)를 파기하므로 2 번째 정적 변수에 대한 메모리를 할당하므로 두 번째 호출은 "메모리 비싸지 않다".
하지만이 test.php 스크립트를 실행하는 경우, memory_get_usage는 테스트 :: getTestData1() 및 테스트 :: getTestData2 (에 대해 동일한 값)
왜 표시됩니다?
메모리 사용을 테스트하는 동안 또 다른 유용한 기능 : http://php.net/manual/en/function.memory-get-peak-usage.php – Pinoniq
감사합니다 Pinoniq! 이제 Test :: getTestData2()가 메모리 측면에서 가장 비싸지 않다는 것을 입증 할 수 있습니다. – Ligio
비싸지는 않습니다. 궁극적으로 나쁜 프로그래밍은 애플리케이션에서 병목 현상이 될 수 있습니다. 그래서 저는 이런 종류의 최적화에 그다지 집중하지 않을 것입니다. – Pinoniq