如何正确加载数千条logging到领域?

我试图使用Realm将大约8000条logging保存到磁盘中,但它阻止了UI。 因此,我使用Realm.asyncOpen在后台线程中执行数据保存。

当我尝试以这种方式保存大量logging时,问题是100%的CPU使用率。

如何正确加载数千条logging到领域?

尝试在官方演示中的方式来保存大量的数据:

 DispatchQueue(label: "background").async { autoreleasepool { // Get realm and table instances for this thread let realm = try! Realm() // Break up the writing blocks into smaller portions // by starting a new transaction for idx1 in 0..<1000 { realm.beginWrite() // Add row via dictionary. Property order is ignored. for idx2 in 0..<1000 { realm.create(Person.self, value: [ "name": "\(idx1)", "birthdate": Date(timeIntervalSince1970: TimeInterval(idx2)) ]) } // Commit the write transaction // to make this data available to other threads try! realm.commitWrite() } } } 

你有没有尝试批量保存数据? 像https://github.com/realm/realm-cocoa/issues/3494

 - (void)startImport { NSLog(@"Staring Import"); dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{ RLMRealm *realm = [RLMRealm defaultRealm]; NSUInteger batch = 0; NSUInteger total = 50000; [realm beginWriteTransaction]; Feed *newFeed = [[Feed alloc] init]; [realm addObject:newFeed]; for (NSUInteger i = 0; i < total; i++) { FeedItem *newItem = [[FeedItem alloc] init]; newItem.feed = newFeed; [newFeed.items addObject:newItem]; batch++; if (batch == 100) { batch = 0; [realm commitWriteTransaction]; NSLog(@"Committed Write Transaction, Saved %@ total items in Realm", @(i+1)); if (i < (total-1)) { [realm beginWriteTransaction]; } } else if (i == (total-1)) { [realm commitWriteTransaction]; NSLog(@"Committed Write Transaction, Saved %@ total items in Realm", @(i+1)); } } }); }