fmdb iphone 3g большой массив - PullRequest
0 голосов
/ 15 июня 2011

У меня проблемы с fmdb на iphone 3g с прошивкой: 4.2.1 (8C148). У меня есть большой NSMutableArray, который содержит команды sql (загруженные из базы данных). Я заполняю NSMutableArray через NSAutoreleasePool (часть освобождения памяти для iphone 3g) и получаю массив размером 40+ МБ.

Затем я использую следующие команды:

 [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 Мб памяти. Iphone 3g не может справиться с этим, и он терпит неудачу с предупреждениями уровня 1 и, наконец, завершается.

Я попробовал его на iphone 3GS, и он отлично работает.

У кого-нибудь есть идеи, как это пропустить? Я не могу использовать основные данные (хотя это отличное решение), потому что у меня уже есть большая база данных, предварительно сделанная в комплекте с приложением.

1 Ответ

1 голос
/ 15 июня 2011

Закрыть БД между вызовами, используя

[db close];

Чтобы освободить память, которая больше не используется.

Большинство разработчиков стараются держать соединение с БД как можно дольше. Однако на iPhone - с памятью самые жесткие ограничения и быстрый ввод-вывод - многократное открытие / закрытие БД для каждого вызова происходит чаще всего.

...