2010-08-21 9 views
5

iPhone 3G 네트워크에서 NSURLConnection 성능을 이해하려고합니다. 다음 테스트 코드가 있습니다NSURL 연결 최적화

-(void)doTest2 { 
    max = 5; 
    NSURL *url = [NSURL URLWithString:@"http://www.google.com"]; 
    NSURLRequest *request2 = [[[NSURLRequest alloc] initWithURL:url] autorelease]; 
    NSURLConnection *conn=[[NSURLConnection alloc] initWithRequest:request2 delegate:self]; 
    self.startDate = [NSDate date]; 
    if (conn) 
    { 
     receivedData = [[NSMutableData data] retain]; 
    } } 

- (void)connectionDidFinishLoading:(NSURLConnection *)connection { 
     self.endDate = [NSDate date]; 
     NSTimeInterval interval = [self.endDate  timeIntervalSinceDate:self.startDate]; 
     NSLog(@"Time:%f Size:%u", interval, [receivedData length]); 
     [receivedData release]; 

     count = count + 1; 
     if (count == max) { 
      count = 0; 
      sleep(3); 
     } 
     self.doTest2;} 

매우 처음 요청은 느립니다 (1 초 이상). 요청 2-5는 빠릅니다 (0.25 초 미만). 3 초 이상 잠을 자면 잠자기 후 첫 번째 요청이 느립니다. 그러나 3 초 미만으로 잠을 자면 빠릅니다. 어떤 아이디어?

답변

2

여러 가지 이유가있을 수 있습니다. 첫 번째 요청에서 TCP 스택은 google.com의 DNS 이름을 확인한 후 캐시됩니다. 또한 3G 네트워크를 초기화하는 데 약간의 시간이 필요할 수 있습니다.

2

내 이론을 뒷받침하는 링크를 찾을 수는 없지만, WWDC 2010에서 Apple 엔지니어는 iPhone의 전력 소비를 반복적으로 강조하면서 3G 사양에서 라디오를 일정 기간 동안 높은 전력 상태로 유지해야한다고 말했습니다. 마지막 전송 후 시간. 내 생각 엔 3 초를 기다리면 라디오가 유휴 상태가되고 다음에 전송하려면 전원을 켜고 셀 타워와 다시 협상해야합니다.

1

FTP는 상태 저장 프로토콜이므로 통신을 초기화해야합니다. 인증을하고 서버에 정보를 보내야합니다. 처음에는 시간이 오래 걸립니다.