我写了一个简单的Mac OS应用程序。该视图仅包含隐藏的WebView和NSTextView。在某个时间,将一个接一个地解析100个URL。在WebView中加载一个URL,一些DOM树解析发生,冲洗并重复。
一切正常,但计算机处于空闲状态(无用户活动)时加载时间存在一些重大差异。当我使用计算机时,URL需要 2秒才能加载。如果我不使用计算机一段时间,则需要加载 1分钟的网址。
当我在一段时间后回到计算机并在TextView中看到最后的URL花了大约一分钟时,下一个URL将立即加载。因此,它必须与系统上的用户活动有关。对?谁知道为什么?
我在OS X 10.9.4上。
以下是我加载网址的代码:
#pragma mark -
- (void)processNextUrl
{
// No url, stop
if (_processQueue.count == 0)
return;
// Process url
NSString *urlString = [_processQueue objectAtIndex:0];
NSURL *url = [NSURL URLWithString:urlString];
NSURLRequest *request = [NSURLRequest requestWithURL:url];
[[_webView mainFrame] loadRequest:request];
}
#pragma mark - WebFrameLoadDelegate
- (void)webView:(WebView *)sender didFinishLoadForFrame:(WebFrame *)frame
{
// Page ready for parsing?
if ([[sender mainFrame] isEqual:frame] == NO)
return;
// Append date, time and url to TextView
NSString *url = [[[[frame dataSource] request] URL] absoluteString];
[self logText:url];
// Parser does some DOM parsing and outputs to TextView
Parser *parser = [[Parser alloc] initWithWebFrame:frame delegate:self];
[parser parse];
}
#pragma mark - ParserDelegate Methods
- (void)parser:(Parser *)parser didFinishParsingUrl:(NSString *)url
{
[_processQueue removeObjectAtIndex:0];
[self processNextUrl];
}
答案 0 :(得分:0)
我敢打赌AppNap正在扼杀你的资源过程。
您可能想要在Finder的应用程序的“获取信息”窗口中禁用AppNap - 临时测试以查看我当然是对的 - 或者只是使用NSProcessInfo' s {{3告诉系统该活动是用户启动的,不应该限制应用程序。