在sqlite数据库中插入大量数据需要很长时间

时间:2012-08-01 06:24:48

标签: iphone objective-c ios

我将大量数据插入我的sqlite数据库。现在,完成该过程需要很长时间,这对用户来说是令人沮丧的。这里的任何人都可以告诉我如何快速或任何替代方案。

Plss帮帮我......

2 个答案:

答案 0 :(得分:1)

  1. 如果您要存储图像或类似的东西,请考虑不将其存储在数据库中,因为这样做效率很低。将那种二进制数据存储在Documents文件夹中,如果需要在数据库中跟踪它,可以通过将文件名存储在数据库中而不是图像来实现。

  2. 如果可能,请在后台执行这些操作,例如通过Grand Central DispatchNSOperationQueue。这些技术也在Concurrency Programming Guide中讨论。如果您使用SQLite包装器执行此操作,例如优秀的FMDB(我衷心建议您进行调查,如果您还没有),则可以使用其FMDatabaseQueue(使用GCD)来实现使用前台数据库查询协调后台数据库操作因为它正在使用队列,所以你只需要确保在可能的情况下在较小的任务中中断后台数据库操作,以避免阻塞前台数据库操作。

答案 1 :(得分:0)

NSOperationQueue提供用于运行其操作的线程。

创建NSInvocationOperation个对象,并将其添加到NSOperationQueue

数组中
 NSInvocationOperation *insertOperationObject1 = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(insertMethod1) object:nil];
    NSInvocationOperation *insertOperationObject2 = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(insertMethod2) object:nil];
    NSInvocationOperation *insertOperationObject3 = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(insertMethod3) object:nil];

//将数据库提取操作添加到NSOperationQueue

 NSOperationQueue     *m_opqInsertQueue = [[[NSOperationQueue alloc] init] autorelease];
        [m_opqCustomerProfileDataFetchQueue setMaxConcurrentOperationCount:1];
        [m_opqCustomerProfileDataFetchQueue addOperations:[NSArray arrayWithObjects:insertOperationObject1, insertOperationObject2, insertOperationObject3,  nil] waitUntilFinished:NO];