2011-06-15 56 views
0

我用fmdb与iPhone 3g固件:4.2.1(8C148)有一些麻烦。 我有一个包含sql命令(从数据库下载)的大型NSMutableArray。我通过NSAutoreleasePool(为iphone 3g发布一些内存的一部分)填充NSMutableArray,并且我得到了一个40+ MB的数组。fmdb iphone 3g大型阵列

然后,我用下面的命令:

[db beginTransaction]; 
for (NSString* sql in updateSQL) 
{ 
    if ([email protected]"") { 
    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无法处理这个问题,它在一级警告中失败并最终退出。

我在iphone 3GS上试过了,它工作正常。

有没有人有任何想法如何跳过?我无法使用核心数据(尽管它是一个很好的解决方案),因为我已经将一个大型数据库预先捆绑在应用程序中。

回答

1

使用

[db close]; 

为了确保自由内存不再使用关闭调用之间的DB。

大多数开发人员试图尽可能保持数据库连接打开。然而,在iPhone上 - 内存最严格的约束和IO快速 - 反复打开/关闭每个通话的数据库大部分时间更快。

+0

是的,做到了!我看到我的内存分配从15-> 48+兆高峰稳定到15-20微米。我会尝试明天测试它,但到3g(我的主要测试是3gs)。 4和Ipad的工作就像一个魅力。 – Panagiotis 2011-06-15 21:43:41