美文网首页
关于Usage Comparsion的问题

关于Usage Comparsion的问题

作者: leejobs | 来源:发表于2019-04-03 11:00 被阅读0次

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

    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是一直在变动中,该内存的使用,我想知道有哪位朋友验证过,可以分享一下心得。谢谢

    相关文章

      网友评论

          本文标题:关于Usage Comparsion的问题

          本文链接:https://www.haomeiwen.com/subject/smesnttx.html