【问题标题】:FMDB - Improve FMResultSet speedFMDB - 提高 FMResultSet 速度
【发布时间】:2014-03-20 12:53:28
【问题描述】:

此代码需要很长时间才能运行。我有大约 100,000 条记录。 每个步骤花费的时间大致相同......从 FMResultSet 获取结果并将其读入 3 个数组。我尝试使用两个选择语句。一个获取结果计数,然后在 mutableArray 中分配该数量。没有性能差异。有什么提高速度的建议吗?

FMResultSet *results = [database executeQuery:@"SELECT FriendlyName, Serial, Barcode FROM Inventory, Company WHERE Inventory.friendlyName <> '' AND Company.CompanyID = Inventory.companyID AND Company.CompanyName = ?", selectedCompany];

arrayFriendlyName =[[NSMutableArray alloc]init];
arraySerial = [[NSMutableArray alloc]init];
arrayBarcode = [[NSMutableArray alloc]init];


while([results next]) {

    [arrayFriendlyName addObject:[results stringForColumn:@"FriendlyName"]];
    [arrayBarcode addObject:[results stringForColumn:@"Barcode"]];
    [arraySerial addObject:[results stringForColumn:@"Serial"]];

}

[database close];

【问题讨论】:

  • 需要多少时间,对用户有害吗?我相信 100000 条记录会减慢这个过程。可以将任务发送到后台吗?
  • 多项选择当然不会给您带来任何好处。如果你不愿意挂断你的 UI 线程,最好你可以像@Volker 所说的那样将任务执行到某个后台队列
  • 对了,为什么一次需要1000,000条记录?为什么不在需要时延迟加载记录,否则会对您的应用造成严重的性能威胁?
  • 总共需要大约 23 秒。
  • 它会加载 100k 条记录,以便可以使用搜索栏搜索和查看它们。这是一个库存应用程序。

标签: ios objective-c nsmutablearray fmdb


【解决方案1】:

根据您的数据库结构,当涉及到数千行时,任何围绕 sqlite 的面向对象的包装器都可能非常慢。您可以尝试通过直接访问 sqlite 数据库来加速它,而不使用任何面向对象的包装器。由于您不需要任何关系(至少在您的示例代码中),因此您不会丢失任何相关功能 - 而且它会尽可能快。

与往常一样,Ray Wenderlich 是一个值得一看的好资源:http://www.raywenderlich.com/913/sqlite-tutorial-for-ios-making-our-app

如果您还没有这样做,您还可以查看您是否在查询中正确设置了索引 - 因为您要连接两个表,在连接的列上没有索引会严重影响您的性能。

【讨论】:

    猜你喜欢
    • 2013-05-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多