Быстрее ли синтаксический анализ XML в основном потоке? Почему?

Я использую LRResty и NSXMLRequest для отображения результатов поиска из API. Вот как выглядит мой код:

[[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:YES];
[[LRResty client] get:searchEndpointURL withBlock:^(LRRestyResponse *response) {

    //NSLog(@"Results:\n\n\n%@", [response asString]);

    [[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:NO];
    NSXMLParser *parser = [[NSXMLParser alloc] initWithData:[response responseData]];
    parser.delegate = self;

    //TODO: Why does this work faster than running in the background?
    [parser parse];

    //[parser performSelectorInBackground:@selector(parse) withObject:nil]
}];

По какой-то причине мой контроллер отображения поиска обновляется быстрее, когда я анализирую блокировку основного потока, чем без нее.

Связано ли снижение производительности с тем, что парсер не работает в основном потоке? Как же так?




Ответы (1)


Производительность будет медленнее вне основного потока, потому что приложение должно сделать больше. Создание самого потока влечет за собой некоторые накладные расходы, а затем время обработки должно быть разделено между основным потоком, который занят обработкой событий пользовательского интерфейса и отрисовкой UIView, и фоновым потоком, выполняющим синтаксический анализ. Если вы выполняете синтаксический анализ в основном потоке, вы не позволяете приложению что-либо делать с пользовательским интерфейсом, поэтому ему меньше нужно делать, и оно завершится раньше. Но вы не получаете обновлений пользовательского интерфейса, так что, очевидно, это нехорошо.

person Tark    schedule 23.03.2012