アプリウィンドウ全体をカバーする単一の WebView インスタンスで構成される非常に単純なココアアプリ (iPhone ではない) があります。特定のページで、アプリがいずれかのコアを 100% 消費することに気付きました。インストルメントの使用 ほとんどすべての時間が [NSView displayIfNeeded] に費やされていることがわかります。コール ツリーをドリルダウンすると、[WebHTMLView drawSingleRect] が表示されます。Safari で実行されている同じページは、ほとんど CPU を使用せずに正常に動作します...
なぜこれができるのか誰にも考えがありますか?
追加情報:
- アプリ ウィンドウのサイズを (ほんの少しでも) 変更すると、CPU 使用率が元に戻ります。
- OS X 10.8.5 を実行中
編集:私が見つけた唯一の「修正」は、ウィンドウのサイズを変更する NSTimer を追加することです。問題を「修正」するサイズ変更中に何が起こるかを誰かが知っているなら、私はそれを聞きたいです.
[NSTimer scheduledTimerWithTimeInterval:10.0 target:self selector:@selector(resizeToFixCPUUsage) userInfo:nil repeats:YES];
- (void)resizeToFixCPUUsage {
NSRect frame = [self.window frame];
frame.size.height -= 1;
[self.window setFrame:frame display:NO animate:NO];
frame.size.height += 1;
[self.window setFrame:frame display:NO animate:NO];
}
CPU 使用率を示すインストゥルメント:
ペイントを表示する Web インスペクタ (アプリは 100% の CPU を使用し、実線の紫色のバーに一致します):