关于Usage Comparsion的问题

2019-04-03  本文已影响0人  leejobs

因为我的项目中并没有使用长链接,对于数据的实时更新,是单方面的接口查询方式,测试内存使用过程中遇到两个问题对性能影响比较大。

1.数据层

数据层使用了YYModel 去配置当前的数据使用问题,对于request 或者 response中对于数据的书末数模转换的问题 code如下:

// Model 转换 字典

+ (NSMutableDictionary*)returnToDictionaryWithModel:(id)model

{

    NSMutableDictionary *userDic = [NSMutableDictionary dictionary];

    unsignedintcount =0;

    objc_property_t *properties = class_copyPropertyList([model class], &count);

    //获取基类数据

    ClasssuperClass =class_getSuperclass([modelclass]);

    if(superClass && (superClass == [FDSRequestBaseModelclass] || superClass == [FDSResponseBaseModelclass])) {

        unsignedinttempCount =0;

        objc_property_t*superProperties =class_copyPropertyList([superClassclass], &tempCount);

        for(inti =0; i < tempCount; i++) {

            constchar*tempName =property_getName(superProperties[i]);

            NSString*tempPropertyName = [NSStringstringWithUTF8String:tempName];

            idtempPropertyValue = [modelvalueForKey:tempPropertyName];

            if(tempPropertyValue) {

                [userDicsetObject:tempPropertyValueforKey:tempPropertyName];

            }

        }

        free(superProperties);

    }

    for(inti =0; i < count; i++) {

        constchar*name =property_getName(properties[i]);

        NSString *propertyName = [NSString stringWithUTF8String:name];

        idpropertyValue = [modelvalueForKey:propertyName];

        if(propertyValue) {

            [userDicsetObject:propertyValueforKey:propertyName];

        }

    }

    free(properties);

    returnuserDic;

}

产生的问题1,在大量使用接口的时候,该request model转换NSDictionary中会损耗大量的cpu使用

解决方案:直接调用原始AFNetworking框架,将封装的多层管理去掉,解决了一部分数模转换中的CPU大量损耗问题(并不是很完美的解决方案)

问题2,在实时更新数据过程中,该response 中对model也进行了便利,来赋予每个数据的更新,这里我使用了异步绘制画布,在将结果setneeddisplay,同步绘制到view上模拟苹果原生控件的使用,产生了一个异常问题mapData:769: *** ImageIO - mmapped file changed (old: 44679  new: 44374),会偶尔出现上半部分有数据,但有一部分整体是一片黑(即使数据更新了 文字成黑色也看不到,我并没有验证该结果)

解决方案:我去掉了同步绘制,不管是Tableview滑动刷新,还是接口赋值数据我都将该异步绘制结果直接赋予了集成的UIImageview class

我测试线程的更新

部分线程执行和使用率 以及系统回收时间

让项目跑了一整晚 统计结果如第一张图所示:对于other processes的大量内存值 这个我查询了cache的diskmemory 物理内存并没有存储该数据,缓存数据也没有,因为没有找到该数据存储位置,智能暂时推测该数据可能存储在xcode编译的某个地方,free是一直在变动中,该内存的使用,我想知道有哪位朋友验证过,可以分享一下心得。谢谢

上一篇下一篇

猜你喜欢

热点阅读