如何在Swift中改善这种非常慢的Realm Object排序?

我正在处理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上像这样爬行。

如何将其降低到亚秒级性能?

wanglei2222 回答:如何在Swift中改善这种非常慢的Realm Object排序?

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/3102053.html

大家都在问