Ome*_*ega 6 performance realm ios swift
我有一个需要保存到Realm的大型JSON数组,问题是此操作持续约45秒,而且时间太长。我尝试为JSON数组中的每个元素同时运行保存操作,如下所示:
for element in jsonArray { // jsonArray has about 25 elements
DispatchQueue.global(qos: .userInitiated).async {
let realm = try! Realm()
let savedObject = realm.objects(MyObject.self).filter("name == '\(element.name)'")
for subElement in element { // element is an array that has around 1000 elements
let myModel = MyModel(initWith: subElement) // MyModel initialization is a simple light weight process that copies values from one model to another
savedObject.models.append(myModel)
}
}
}
Run Code Online (Sandbox Code Playgroud)
当我尝试运行相同的代码时DispatchQueue.main.async,即使不是并发运行,它的完成速度也要快2倍左右。我也尝试过以服务质量运行上面的代码,.userInteractive但是速度相同。
当我运行此代码时,CPU利用率约为30%,内存约为45 MB。是否有可能加快此操作的速度,否则我会走到尽头?
DispatchQueue.global(qos: .userInitiated).async块内。正如Realm 网站上记录的那样:
\n\n\n\n\nRealm 写入操作是同步且阻塞的,而不是异步的。如果线程 A 开始写操作,则线程 B 在线程 A 完成之前在同一 Realm 上开始写操作,则线程 A 必须在线程 B\xe2\x80\x99s 写操作发生之前完成并提交其事务。写入操作始终在 beginWrite() 上自动刷新,因此重叠写入不会产生竞争条件。
\n
这意味着尝试在多个线程中写入不会获得任何好处。