2012-05-18 4 views
0

안녕하세요 저는 최근 개체로 데이터를 저장하는 방법에 대한 this article 보았다 : 나는 배열 다음을가 이의를 타입 캐스팅에 사용 해요개체에 데이터 저장. 어떤 방법이 더 빠릅니까?

$profile = new stdClass; 
$profile->first_name = 'Woppi'; 
$profile->last_name = 'Jillenjack'; 
$profile->email = '[email protected]'; 

(나는 문서를 읽기 전에) :

$profile = array('first_name'=>'Woppi', 'last_name'=>'Jillenjack', 'email'=>'[email protected]'); 
$profile = (object)$profile; 

첫 번째 방법이 더 빠르다고 생각합니다. 어떤 것이 더 빠름을 어떻게 알 수 있습니까? 내가 이것을 발견 할 수있는 방법을 제안 할 수 있습니까?

대단히 감사합니다. Linux에서 PHP를 실행하는 경우

+1

두 가지의 선택을, 결정적인 아니다 물체 건설 속도. b) 외부 판독기에 대해 명확한 것을 수행하십시오. c) 독자적으로 벤치마킹을 수행하는 것이 얼마나 어려운가요? d) 그것은 네 가지였습니다. –

+0

글쎄, 만약 당신이이 작업을 초당 수 천 가지가 있다면, 정말 좋아할 것입니다. 또한 당신이 공개하고 싶은 오픈 소스 라이브러리를 만들고 있다면 그것을 완벽하게 만들고 싶습니다. 나는 완벽 주의자이며 그것이 정말로 중요하다고 믿습니다. –

+0

@ Cicada 나는 많은 것을 배워야한다. .. 나는 단지 흥미로운 ... that 's 누구나 이어도. – Woppi

답변

1

그럼 당신은 * Windows가 정확한 시간 만 근사치를 반환하지 않습니다 microtime()
각 방법을 실행하는 시간을 측정 할 수 있습니다. 당신이 마이크로 초 단위로 무언가를 측정하려한다면 그건 도움이되지 않을 것입니다.

또한 두 번째 방법은 PHP 코드의 여러 줄을 해석하는 대신 C로 작성된 통합 함수를 사용하기 때문에 더 빨라야한다고 생각합니다.

그래서 두 번째 투표를합니다. 각 방법에 소요되는 시간을 측정하면서 재미있는 시간을 가질 수 있습니다.

+1

네 말이 맞아. 나는 단지 마이크로 시간을 해냈다. :) typecasting이 빠릅니다. http://codepad.org/2M8SrO19 – Woppi

+0

슬픈데, 어떻게 형의 형변환이 클래스의 인스턴스 생성보다 더 빠르며 변수를 추가 할 수 있습니까? 이론적으로, 내부적으로 캐스팅은 stdClass 객체의 생성을 수행하고 데이터를 파싱해야합니다. –

+0

@Woppi는 이러한 테스트의 순서를 바꾸기 때문에 형변환이 느리다는 것을 알 수 있습니다 : D 루프를 추가하거나 더 정확하게하기 위해 뭔가를 추가하십시오 – Vytautas

1

두 경우 모두 클래스 (stdClass 또는 Array)의 인스턴스를 만들고 데이터를 설정해야합니다. 두 번째 경우에는 새 작업을 추가하므로 캐스트는 암시 적으로 stdClass 인스턴스를 만들고 Array에서 stdClass로 구문 분석하는 데이터 작업을 암시 적으로 제공합니다.

첫 번째 경우에는 클래스 인스턴스 만 만들고 두 번째 클래스는 모두 만들기이지만 1은 프로그래머에게는 보이지 않습니다. | 10.045720100403 : 나는 첫 번째는 메모리와 속도

1 <?php                                           
    2                     
    3 $time_start = microtime(true);             
    4                     
    5 for($i=0 ; $i<1000000; $i++)             
    6 {                    
    7 $profile = new stdClass;$              
    8 $profile->first_name = 'Woppi';            
    9 $profile->last_name = 'Jillenjack';           
10 $profile->email = '[email protected]';        
11 $time_end = microtime(true);$             
12 }                    
13                     
14 $object = $time_end - $time_start;            
15                     
16                    
17 $time_start = microtime(true);            
18 for($i=0;$i<1000000;$i++)              
19 {                    
20 $profile = array('first_name'=>'Woppi',          
21   'last_name'=>'Jillenjack',            
22   'email'=>'[email protected]');        
23 $profile = (object)$profile;             
24 $time_end = microtime(true);             
25 }                    
26 $array_to_object = $time_end - $time_start;         
27                     
28 echo "stdClass: $object | Typecasting: $array_to_object";      
29                    
30 ?> 

stdClass을보다 효율적이라고 생각 형변환 : 10.009358882904

stdClass : 9.9519069194794 | 형변 변환 : 9.2100629806519

stdClass : 9.2515120506287 | 형변 변환 : 9.480808019638

stdClass : 9.5376181602478 | 형변 변환 : 9.2310011386871

stdClass : 9.9628109931946 | 타입 캐스팅 : A) 나는 사람들이 실제로 우려하는 믿을 수 없다 : 10.414475917816

시험은이 경우에 아마도 메모리 소비 도움이 우리가 사용 하나 다른

관련 문제