2013-02-26 3 views
0

Я использую класс FMDB wrapper для моего приложения iPad. У меня есть table, который содержит почти 10000 записей. Каждая запись имеет 140 полей. Я использую Modal class для хранения извлекаемых значений, как,Sqlite производительность с 10000 записей в iPad

NSString *query = [NSString stringWithFormat:@"select * from table"]; 
FMResultSet *results = [db executeQuery:query]; 
while([results next]) { 
    ModalClass *modal = [[ModalClass alloc] init]; 
    [modal setField1:value1]; 
    [modal setField2:value2]; 
    [modal setField3:value3]; 
    [modal setField4:value4]; 
    . 
    . 
    . 
    . 
    . 
    [modal setField139:value139]; 
    [modal setField140:value140]; 

    [array addObject:modal]; 
} 

Я использовал некоторые варианты я знаю, performSelectorOnMainThread, dispatch_async() и некоторые другие многопоточные методы. Но ничто не помогло мне сделать это эффективным.

Симулятор, требуется 5 секунд. Но когда дело доходит до устройства занимает почти 20 секунд.

База данных предоставляется клиентом, поэтому я не мог изменять или изменять любые таблицы.

Может ли кто-нибудь помочь мне сделать это эффективным. Ожидание 20 секунд очень отвратительно.

Спасибо.

+0

Что вы делаете, вставляя строки в эту таблицу? – trojanfoe

+0

no @trojanfoe, я извлекаю из таблицы – arthankamal

+0

И зачем вам все 10 000 строк в памяти? Вы не делаете это правильно ... – trojanfoe

ответ

2

Вы приближаетесь к проблеме неправильно. UITableView будет иметь data source, который вызывается, чтобы вы могли заполнять ячейки. Используйте эти методы для загрузки только данных строки, которые вам нужны, а не всех 10 000 строк вверх.

Обычно я использую простой метод кеширования, чтобы избежать повторной загрузки одной и той же строки много раз для разных ячеек в представлении таблицы, но вам не нужно беспокоиться об этом изначально (беспокоиться об этом позже, если вы чувствуете, что база данных слишком сильно ударяется).

+0

Я согласен: это путь. Также не только для скорости работы, но и для использования памяти. –

+0

@trojanfoe. вы хотите, чтобы вы принимали только значения, которые я показываю в Tableview. – arthankamal

+2

Да, как упоминалось в @rokjarc, iOS все равно использует этот подход, так что данные для каждой строки предоставляются только тогда, когда это необходимо, чтобы сократить объем памяти. Получение строки из базы данных только тогда, когда это необходимо, следует этому принципу. – trojanfoe

Смежные вопросы