FMDB 大量数据操作 卡顿优化

// 创建FMDatabaseQueue
    FMDatabaseQueue * queue = [FMDatabaseQueue databaseQueueWithPath:@"数据库路径"];
    dispatch_queue_t g_queue =  dispatch_queue_create("com.setNewsFavriteData", DISPATCH_QUEUE_SERIAL);//这里用串行队列,并行队列会创建多个线程,抢占cpu资源,造成卡顿
    //添加数据
    NSUInteger dataCount = favriteDataArray.count;
    
    [db  setShouldCacheStatements:YES];//打开存储过程-----SQLite插入数据效率最快的方式就是:事务+关闭写同步+执行准备(存储过程),如果对数据库安全性有要求的话,就开启写同步。
    
    for (int i = 0; i < dataCount/50 + 1; i++)
    {
        @autoreleasepool {
            for (int j = 0; j < 50 && i*50+j < dataCount; j++)
            {
                dispatch_async(g_queue, ^{
                    //事务操作
                    [queue inTransaction:^(FMDatabase *db, BOOL *rollback) {
            
                        sqlstr = [NSString stringWithFormat:@"INSERT INTO XXXX"];
                        [db executeUpdate:sqlstr];
                    }];
                });
            }
        }
    }

参考 :
sqlite 操作速度优化浅谈
iOS 提升SQLite数据插入效率低、速度慢的方法

你可能感兴趣的:(FMDB 大量数据操作 卡顿优化)