그냥 지역변수, 클래스 멤버변수에 배열을 대입하는 시간이 다르다.


추가 : 대입만이 아니라 꺼내오는 시간도 달라진다.

 

 

아래와 같은 소스코드를 이용하여 각 1천만개짜리 배열에 값을 계산해 넣는 시간과 메모리 사용량을 체크해봤다.

 

<?PHP

define('LOOP_COUNT', 10000000);

 

class Test

{

private $data = array();

 

public function exe()

{

for ($i=0; $i<LOOP_COUNT; $i++) $this->data[$i] = $i * 2 / 11 % 13;

}

 

public function exe_local()

{

$data = array();

for ($i=0; $i<LOOP_COUNT; $i++) $data[$i] = $i * 2 / 11 % 13;

$this->data = $data;

}

}

 

 

// 지역변수 대입

if (!$argv[1]) {

$data = array();

for ($i=0; $i<LOOP_COUNT; $i++) $data[$i] = $i * 2 / 11 % 13;

}

// 클래스 멤버변수에 대입

else if ($argv[1] == 'class') {

$Test = new Test;

$Test->exe();

}

// 클래스 메소드 내부 지역변수에 대입한 다음 마지막에 클래스 멤버변수에 대입

else if ($argv[1] == 'class_local') {

$Test = new Test;

$Test->exe_local();

}

 

printf("MEMORY PEAK USAGE = %.2f MB\n", memory_get_peak_usage() / 1024 / 1024);

 

 

 

 

지역변수

실행시간 = 3.471 초

메모리    = 1425.62 MB

 

클래스 멤버변수

실행시간 = 4.463 초

메모리    = 1425.63 MB

 

클래스 메소드 내부 지역변수 이용

실행시간 = 3.433 초

메모리    = 1425.63 MB

 

 

 

결론

메모리 사용량은 동일하나 실행시간에서 차이가 났다.

코드 완성도와 실행 퍼포먼스 두마리의 토끼를 잡을 수 있는 건,

클래스를 사용하되 멤버변수에 바로 대입하지 않고 계산이 끝난 결과만 대입하는 것.

 

대용량을 다룰 경우(-_-) 격차는 더 심해진다.

 

배열 해시테이블 할당하는 과정이 달라서 그런지 이유는 명확히 알 수 없으나,

막 짜놓은 스크립트를 클래스로 뜯어내는 과정에서 실행시간이 너무(!) 차이가 나서 테스트 후 원인을 발견하여 기록을 남겨둠.

 

 

 

 

 

 

 

Posted by bloodguy
,