Ios 领域插入的高CPU使用率
我在多个JSON文件中循环,处理数据,并插入到领域中。这可能发生在后台线程上 一旦我开始处理我的文件,我的CPU可以跳到230%。它从50-230跳上跳下,中等CPU约为130。我使用了dispatchqueue后台包装器,也使用了autoreleaspool,还尝试在插入函数中拆分提交,但我无法将此CPU降低到可接受的数量 有什么我遗漏的吗?如何提高这些方法的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,
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%的最大值。这是我能期望的最好的吗?有没有更有效的方法?