1

「Card」、「Record」、「Stat」の 3 つのエンティティを持つ CoreData データベースがあります。「Card」のみに約 3000 個のオブジェクトがあり、「Card」には blob 属性がありません (blob 属性が遅い可能性があることはわかっています)。他の 2 つのエンティティにはオブジェクトがありません。

iPhone4 でデバッグしたところ、データベースを開いているときに、かなり遅いことがわかりました。

ここに私のコードがあります:

NSLog(@"database start open...");
        [self.database openWithCompletionHandler:^(BOOL success) {
            NSLog(@"copy & open success: %d", success);
            callback(YES);
        }];

ログは次のとおりです。

2013-05-13 13:11:54.776 SuiShouBei[1670:707] database start open...
2013-05-13 13:11:54.943 SuiShouBei[1670:1b03] CoreData: annotation: Connecting to sqlite database file at "/var/mobile/Applications/850D8AFD-BA6E-4E64-A150-507D5CD645FB/Documents/Default Database/StoreContent/persistentStore"
2013-05-13 13:11:54.950 SuiShouBei[1670:1b03] CoreData: sql: pragma cache_size=200
2013-05-13 13:11:54.956 SuiShouBei[1670:1b03] CoreData: sql: SELECT Z_VERSION, Z_UUID, Z_PLIST FROM Z_METADATA
2013-05-13 13:11:57.941 SuiShouBei[1670:707] copy & open success: 1

CoreData ログから、SELECT Z_VERSION、Z_UUID、Z_PLIST FROM Z_METADATA に3 秒かかり、これらのフィールドとデータは CoreCode フレームワーク自体によって管理されます。また、場合によってはそれ以上かかることもありました (>10 秒)。

なぜそんなに時間がかかったのか、どうすれば速くなるのか本当にわかりませんか?

ありがとう。

4

0 に答える 0