Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 领域插入的高CPU使用率_Ios_Swift_Memory_Realm_Cpu Usage - Fatal编程技术网

Ios 领域插入的高CPU使用率

Ios 领域插入的高CPU使用率,ios,swift,memory,realm,cpu-usage,Ios,Swift,Memory,Realm,Cpu Usage,我在多个JSON文件中循环,处理数据,并插入到领域中。这可能发生在后台线程上 一旦我开始处理我的文件,我的CPU可以跳到230%。它从50-230跳上跳下,中等CPU约为130。我使用了dispatchqueue后台包装器,也使用了autoreleaspool,还尝试在插入函数中拆分提交,但我无法将此CPU降低到可接受的数量 有什么我遗漏的吗?如何提高这些方法的CPU使用率 override open class func processData(json: Data,

我在多个JSON文件中循环,处理数据,并插入到领域中。这可能发生在后台线程上

一旦我开始处理我的文件,我的CPU可以跳到230%。它从50-230跳上跳下,中等CPU约为130。我使用了dispatchqueue后台包装器,也使用了autoreleaspool,还尝试在插入函数中拆分提交,但我无法将此CPU降低到可接受的数量

有什么我遗漏的吗?如何提高这些方法的CPU使用率

override open class func processData(json: Data, 
                                     _cleanSync: Bool, 
                                     completionHandler: @escaping (Int, [Int]) -> ()){

    print("Helper_WorkShift processData")
    var control : [Int] = []
    if let syncReponse = (try? JSONSerialization.jsonObject(with: json, options: [])) as? [[String: Any]] {

        var dataList : [STD_TA_shifts] = []

        for item in syncReponse
        {
            autoreleasepool{
                if let jsonStr = item["data"] as? String {
                    let addItem = STD_TA_shifts(workShiftJsonStr : jsonStr)
                    dataList.append(addItem)
                    control.append(addItem._id)
                }
            }
        }

        if (dataList.count > 0)
        {
            insertWorkShiftList(workShiftList : dataList)
        }
        dataList.removeAll()
    }

    completionHandler(control.count, control)
}
和插入列表方法:

public class func insertWorkShiftList(workShiftList : [STD_TA_shifts])
{
    //print("in insertEmployeeList")
    DispatchQueue(label: "background").async {
        if (workShiftList.count == 0){
            return
        }

        // Bulk insert
        autoreleasepool {
            do {
                var realm : Realm? = try Realm()

                var batch = 0
                let total = workShiftList.count

                realm?.beginWrite()
                for i in 0...total - 1 {
                    autoreleasepool {
                        realm?.add(workShiftList[i], update: true)
                    }
                    batch = batch + 1
                    if batch == 10 {
                        batch  = 0

                        try realm?.commitWrite()

                        if i < (total - 1) {
                            realm?.beginWrite()
                        }
                    }
                    else if i == (total - 1) {
                        try realm?.commitWrite()
                    }
                }

                realm = nil
            }
            catch let error as NSError {
                print("error realm \(error.localizedDescription)")
            }
        }
    }
}
public class func insertWorkShiftList(workShiftList:[STD\u TA\u shifts])
{
//打印(“在insertEmployeeList中”)
DispatchQueue(标签:“后台”).async{
如果(workShiftList.count==0){
返回
}
//批量插入
自动释放池{
做{
var realm:realm?=try realm()
var批处理=0
让总数=workShiftList.count
领域?.beginWrite()
对于0中的i…总计-1{
自动释放池{
realm?.add(工作移位列表[i],更新:true)
}
批次=批次+1
如果批次==10{
批次=0
尝试realm?.commitWrite()
如果i<(总计-1){
领域?.beginWrite()
}
}
如果i==(总计-1)则为else{
尝试realm?.commitWrite()
}
}
领域=零
}
将let错误捕获为NSError{
打印(“错误域\(error.localizedDescription)”)
}
}
}
}

尝试100批而不是100批10@EpicPandaForce所以这个改变确实减少了CPU,但现在我仍然有一个大约223%的最大值。这是我能期望的最好的吗?有没有更有效的方法?