NSURLCподключение оптимизации - PullRequest
5 голосов
/ 21 августа 2010

Я пытаюсь понять производительность NSURLConnection в сети 3G с iPhone. У меня есть следующий тестовый код

-(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 секунд, это быстро. Есть идеи почему?

Ответы [ 4 ]

2 голосов
/ 24 августа 2010

Причин может быть несколько: при первом запросе стек TCP должен разрешить DNS-имя google.com, после чего он кэшируется.Кроме того, для инициализации сети 3G может потребоваться некоторое время.

1 голос
/ 11 декабря 2012

FTP - это протокол с отслеживанием состояния, поэтому связь должна быть инициализирована. Вам необходимо пройти аутентификацию и отправить некоторую информацию на сервер. Так что в первый раз это займет больше времени.

1 голос
/ 30 августа 2010

Я не могу найти ссылку, чтобы поддержать мою теорию, но на WWDC 2010 инженеры Apple неоднократно подчеркивали энергопотребление на iPhone, заявляя, что спецификация 3G требует, чтобы радио поддерживало состояние высокой мощности в течение некоторого временипосле последней передачи.Я предполагаю, что ожидание в течение 3 секунд позволяет радиостанции бездействовать, а при следующей передаче требуется, чтобы оно снова включилось и снова согласовало с вышкой сотовой связи.

0 голосов
/ 28 августа 2010

Я думаю, что эта ссылка может быть полезна: http://developer.apple.com/mac/library/samplecode/CacheInfo-MacOSX/Introduction/Intro.html#//apple_ref/doc/uid/DTS40007751

Она демонстрирует поведение кэширования в какао.

...