我正在处理919个对象。 以下代码在本地Realm DB中找到我过滤的对象,对它们进行排序,然后将结果构造到另一个数组中。
var rowItems: [SignRowAttribute] = []
let startTime1 = CFAbsoluteTimegetcurrent()
// collect
let additionalFilter: String = "isRemovedOnClient == false"
allSignAnnotations = (self.signAnnotationsDAL.findAllWith(listFilter.currentOrganization,locationID: listFilter.currentLocation,projectIDs: listFilter.allProjectIDs,workflowStateIDs: listFilter.allWorkflowStateIDs,withAdditionalPredicate: additionalFilter))
let timeElapsed1 = CFAbsoluteTimegetcurrent() - startTime1
DDLogInfo("⏱ findAllWith Time: \(timeElapsed1)")
let startTime2 = CFAbsoluteTimegetcurrent()
// Sort by:
// 1. sign number
// 2. sign type order_id
// https://stackoverflow.com/a/37604010/7599
let sortedSigns = self.allSignAnnotations.sorted(by: {
// Pull out a copy of the object to better access its properties.
let sign0 = RLMSignAnnotation(value: $0)
let sign1 = RLMSignAnnotation(value: $1)
if sign0.number != sign1.number {
// alphanumeric sort
// https://stackoverflow.com/a/31210070/7599
return sign0.number.localizedStandardCompare(sign1.number) == .orderedAscending
} else {
if let type0 = sign0.signTypeID,let type1 = sign1.signTypeID {
let signType0 = RLMSignType().find(withID: type0)!
let signType1 = RLMSignType().find(withID: type1)!
return signType0.orderID.localizedStandardCompare(signType1.orderID) == .orderedAscending
}
}
return sign0.number.localizedStandardCompare(sign1.number) == .orderedAscending
})
let timeElapsed2 = CFAbsoluteTimegetcurrent() - startTime2
DDLogInfo("⏱ sortedSigns Time: \(timeElapsed2)")
let startTime3 = CFAbsoluteTimegetcurrent()
// assemble
for sign in sortedSigns {
rowItems.append(SignRowAttribute(id: sign.id,title: sign.title,titleColor: sign.titleTextColour,backgroundColor: sign.colour,isReviewable: sign.isReviewable,reviewState: sign.reviewState!))
}
let timeElapsed3 = CFAbsoluteTimegetcurrent() - startTime3
DDLogInfo("⏱ assemble Time: \(timeElapsed3)")
计时结果(以秒为单位):
⏱ findAllWith Time: 0.00439608097076416
⏱ sortedSigns Time: 2.5146470069885254
⏱ assemble Time: 0.9812660217285156
我不希望一小批只有约900个对象在iPhone XS上像这样爬行。
如何将其降低到亚秒级性能?