2010-08-21 18 views
5

我試圖從iPhone瞭解3G網絡上的NSURLConnection性能。我有以下測試代碼NSURLConnection優化

-(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很快(小於.25秒)。如果我睡了3秒或更長時間,睡眠後的第一個請求很慢。但是如果我睡了不到3秒,速度很快。任何想法爲什麼?

回答

2

可能有多種原因:第一次請求時,TCP堆棧需要解析google.com的DNS名稱,然後將其緩存。另外,它可能需要一些時間來初始化3G網絡。

2

我找不到支持我理論的鏈接,但在WWDC 2010上,蘋果工程師一再強調iPhone的功耗,指出3G規範要求無線電在高功率狀態下保持一段時間最後一次傳輸之後的時間。我的猜測是,等待3秒鐘可以讓無線電閒置,而下一次傳輸需要它重新供電並與手機塔重新協商。

1

FTP是一種有狀態協議,所以通信需要初始化。您需要進行身份驗證並向服務器發送一些信息。因此第一次需要更長時間。