【问题标题】:Is parsing XML on the main thread faster? Why?在主线程上解析 XML 是否更快?为什么?
【发布时间】:2012-03-23 17:07:38
【问题描述】:

我正在使用 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]
}];

由于某种原因,当我解析阻塞主线程时,我的搜索显示控制器更新比没有阻塞时更快。

性能变慢是否与解析器未在主线程上运行有关?怎么会这样?

【问题讨论】:

    标签: objective-c multithreading performance nsxmlparser uisearchdisplaycontroller


    【解决方案1】:

    主线程的性能会变慢,因为应用程序需要完成更多工作。创建线程本身会产生一些开销,然后必须在忙于处理 UI 事件和绘制 UIViews 的主线程和进行解析的后台线程之间共享处理时间。如果您在主线程上进行解析,您将阻止应用程序对 UI 进行任何操作,因此它要做的事情更少,它会更快完成。但是你没有得到 UI 更新,所以显然这不好。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-09-06
      • 2011-03-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-19
      相关资源
      最近更新 更多