【问题标题】:fmdb iphone 3g large arrayfmdb iphone 3g 大阵列
【发布时间】:2011-09-15 11:04:34
【问题描述】:

我在使用固件为 4.2.1 (8C148) 的 iphone 3g 时遇到了一些问题。 我有一个包含 sql 命令(从数据库下载)的大型 NSMutableArray。我通过 NSAutoreleasePool 填充 NSMutableArray(为 iphone 3g 释放一些内存的一部分),我得到了一个 40+ mb 的数组。

然后,我使用以下命令:

 [db beginTransaction];
 for (NSString* sql in updateSQL)
 {
  if (sql!=@"") {
   BOOL fmtest = [db executeUpdate:sql];
   if (!fmtest) {
    NSLog(@"Sql FAIL: %@",sql);
   }
   if ([db hadError]) {
    NSLog(@"Err %d: %@", [db lastErrorCode], [db lastErrorMessage]);
   }
 }
 // fetches--; // Counter of total updates;
}
[db commit];

在更新过程中,我获得了 40/50 Mb 的内存分配。 Iphone 3g 无法处理这个问题,它以 1 级警告惨遭失败并最终退出。

我在 iphone 3GS 上试了一下,效果很好。

有人知道如何跳过它吗?我不能使用核心数据(尽管它是一个很好的解决方案),因为我已经有一个与应用程序捆绑在一起的大型数据库。

【问题讨论】:

    标签: iphone memory-management nsmutablearray fmdb


    【解决方案1】:

    在调用之间关闭数据库

    [db close];
    

    确保释放不再使用的内存。

    大多数开发人员都尝试尽可能长时间地保持数据库连接打开。然而在 iPhone 上——内存最严格的约束和 IO 速度很快——在大多数情况下,为每个调用重复打开/关闭数据库会更快。

    【讨论】:

    • 是的,成功了!我看到我的内存分配从 15->48+ meg 峰值变为 15-20meg 稳定。我明天会尝试测试它到 3g(我的主要测试是 3gs)。 4 和 Ipad 就像一个魅力。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-25
    • 2011-04-20
    • 1970-01-01
    • 2011-12-06
    相关资源
    最近更新 更多