美文网首页
iOS大量数据读取操作

iOS大量数据读取操作

作者: 一抹相思泪成雨 | 来源:发表于2020-12-16 10:33 被阅读0次

大量数据读写操作

@interface ViewController ()
@property (nonatomic, strong) NSMutableDictionary *msgCacheDict;

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view.
    self.msgCacheDict = [[NSMutableDictionary alloc] init];
    [self.msgCacheDict setObject:@[].mutableCopy forKey:@"msgCacheDict"];

}

- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
        NSArray *array = @[@"1",@"2",@"3"];
        for (NSInteger index = 0; index < 100000; index++) {
            @autoreleasepool {
                [self saveDataArray:array];
            }
        }
    });
}


// 数组多次copy 操作,造成CPU占用很高,会引起卡顿
-(void)saveDataArray:(NSArray *)array {
//    cpu占用率 85%
    NSMutableArray *tempDataArray = [self.msgCacheDict objectForKey:@"msgCacheDict"];
    NSMutableArray *dataArray = [[NSMutableArray alloc] init];
    if (tempDataArray.count > 0) {
        [dataArray addObjectsFromArray:tempDataArray];
    }
    [dataArray insertObject:@"insert" atIndex:0];  // 添加新数据
    [self.msgCacheDict setObject:dataArray forKey:@"msgCacheDict"];
    NSLog(@"========save data1 ===");
}

// 数组不同方式初始化
-(void)saveDataArray2:(NSArray *)array {
//    cpu占用率 90%
    NSMutableArray *tempDataArray = [self.msgCacheDict objectForKey:@"msgCacheDict"];
    NSMutableArray *dataArray = [[NSMutableArray alloc] initWithArray:tempDataArray];
    [dataArray insertObject:@"insert" atIndex:0];  // 添加新数据
    [self.msgCacheDict setObject:dataArray forKey:@"msgCacheDict"];
    NSLog(@"========save data1 ===");
}


// 最佳方式 减少 copy操作
-(void)saveDataArray3:(NSArray *)array  {
 //    cpu占用率 30%  但需要保证存储的是可变数组
    NSMutableArray *dataArray = [self.msgCacheDict objectForKey:@"msgCacheDict"];
    [dataArray insertObject:@"insert" atIndex:0];  // 添加新数据
    NSLog(@"========save data 2 ===");
}
@end
总结
  • 减少中间的冗余copy操作,节省CPU占用率
  • 异步线程处理、否则卡主线程

相关文章

  • iOS大量数据读取操作

    大量数据读写操作 总结 减少中间的冗余copy操作,节省CPU占用率 异步线程处理、否则卡主线程

  • redis单线程为什么执行速度这么快

    Redis之所以执行速度很快,主要依赖于以下几个原因: (一)纯内存操作,避免大量访问数据库,减少直接读取磁盘数据...

  • 『数据结构』B树(B-Tree)及其变体 B+树,B*树

    原文地址 1. 背景 当有大量数据储存在磁盘时,如数据库的查找,插入, 删除等操作的实现, 如果要读取或者写入,...

  • sqlite 操作速度优化浅谈

    最近开发的SDK因为需要大量的数据库读写操作,所以尝试对数据库操作的速度进行优化,从java转到iOS,发现最明显...

  • 安卓读取联系人信息如果联系人过多导致耗时问题

    最近有个项目,需要读取Android系统的联系人。安卓读取操作其实是联系人数据库的增删改查;IOS方面直接可以获取...

  • NLP学习 2

    Task2 数据读取与数据分析[¶] 本章主要内容为数据读取和数据分析,具体使用Pandas库完成数据读取操作,并...

  • 读取大量数据批量更新

    1. 先看结果对比 1.1 测试数据 测试租户:znfangcadmin 经纪人数据量:199003 做的事情:將...

  • java读取大文件解决思路

    1. java 读取大文件的困难 java 读取文件的一般操作是将文件数据全部读取到内存中,然后再对数据进行操作。...

  • 23种pandas核心操作

    基本数据集操作 (1)读取CSV格式的数据集 或者 (2)读取Excel数据集 (3)将 DataFrame 直接...

  • python操作excel的实践

    记录一下python对excel数据的处理和操作 数据读取 读取整个表 读取单个sheet 获取行列,返回数组(行...

网友评论

      本文标题:iOS大量数据读取操作

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