AppBundleにXMLが含まれています。このXMLファイルを解析しています。NSXMLParser
次の方法を使用して、このXMLを解析しました。
- コード全体をメインスレッドでシリアルに実行する
ディスパッチキュー(GCD)の使用:
2.1dispatch_queue_createを使用して独自のディスパッチキューを作成する
2.2優先度の高いdispatch_get_global_queueでグローバルキューを使用する
2.3優先度の低いグローバルキューの使用
2.4バックグラウンド優先でグローバルキューを使用する
を使用して
NSOperationQueue
XMLファイルの解析の実行にかかったパフォーマンスと合計時間を確認したところ、非常に奇妙な(または正しい可能性がある)結果が見つかりました。
上記の解析方法のコードは次のとおりです。
メインスレッドでのシリアル実行-実行時間34ミリ秒。
BOOL success = [conf parseXMLFile:[[NSBundle mainBundle] pathForResource:@"Configuration" ofType:@"xml"] didFailWithError:&error]; if (success) { DLog(@"Parsing Complete"); } else DLog(@"Parse error %@",[error description]);
2.1dispatch_queue_createの使用-実行時間68ミリ秒。
dispatch_queue_t backgroundQueue = dispatch_queue_create("BackQueue", NULL);
dispatch_async(backgroundQueue, ^{
NSError *error = nil;
BOOL success = [conf parseXMLFile:[[NSBundle mainBundle] pathForResource:@"Configuration" ofType:@"xml"] didFailWithError:&error];
if (success) {
DLog(@"Parsing Complete");
}
else
DLog(@"Parse error %@",[error description]);
});
dispatch_release(backgroundQueue);
2.2優先度の高いdispatch_get_global_queueでグローバルキューを使用する-実行時間-74ミリ秒
dispatch_queue_t backgroundQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0);
dispatch_async(backgroundQueue, ^{
NSError *error = nil;
BOOL success = [conf parseXMLFile:[[NSBundle mainBundle] pathForResource:@"Configuration" ofType:@"xml"] didFailWithError:&error];
if (success) {
DLog(@"Parsing Complete");
}
else
DLog(@"Parse error %@",[error description]);
});
dispatch_release(backgroundQueue);
2.32.2と同様に優先度が低いグローバルキューの使用DISPATCH_QUEUE_PRIORITY_LOW-実行時間-72ミリ秒
2.42.2と同様にバックグラウンド優先度でグローバルキューを使用するDISPATCH_QUEUE_PRIORITY_BACKGROUND-実行時間-37ミリ秒
2.5。使用NSOperationQueue
(NSOperationのサブクラス化)-実行時間-36ミリ秒
誰かが私がこれらの実行時間を理解するのを手伝ってくれますか、そしてなぜそれらはとても奇妙なのですか(または私は何かを逃していますか)。メソッド1で最高のパフォーマンスが得られる理由DISPATCH_QUEUE_PRIORITY_BACKGROUNDがHIGHよりも優れたパフォーマンスを提供するのはなぜですか。NSOperationQueueがGCDよりも優れた結果をもたらすのはなぜですか?