CoreData上下文在大数据集上保存较差的性能

时间:2020-10-06 17:09:39

标签: ios swift core-data swiftui

我在CoreData中有一个 - Found app/requirements.txt [master] | Failed to process manifest app/requirements.txt对象的大型数据集(约3000个项目)。添加新项目时出现性能问题:动画大约需要2秒钟。这是代码:

MoodEntry

 @Environment(\.managedObjectContext) var context
 @FetchRequest(fetchRequest: MoodEntry.getAllMoodItems()) var moodEntries: FetchedResults<MoodEntry>

是否会因为我每次添加新项目时都保存所有上下文而发生问题?有一个简单的解决方案吗?

2 个答案:

答案 0 :(得分:0)

您是否已经尝试在后台线程中执行所有操作?

    Button(action: {
                                
DispatchQueue.global(qos: .background).async {
                                let moodEntry = MoodEntry(context: context)
                                moodEntry.value = 1
                                moodEntry.date = Date()
                                moodEntry.id = UUID()
                                
                                do {
                                    try context.save()
                                } catch {
                                    print(error)
                                }
}
                            
                                let impactLight = UIImpactFeedbackGenerator(style: .light)
                                impactLight.impactOccurred()
    
                        }) { Image("Button1").renderingMode(.original) }

答案 1 :(得分:0)

什么动画慢?我猜您有一个列表,其中显示了获取请求的结果,而就是更新缓慢的原因。如果是这样:速度很慢,因为SwiftUI会逐行显示。一种解决方法是在List上设置.id(UUID()),以便在不区分行的情况下重新生成整个对象。这是一个解释:https://www.hackingwithswift.com/articles/210/how-to-fix-slow-list-updates-in-swiftui