Файл sqlite против csv для iPhone - PullRequest
0 голосов
/ 08 января 2011

В нашем приложении загружено около 10 файлов sqlite, каждый из которых содержит около 4000 строк. Мы обрабатываем эти данные и отображаем их в виде таблицы. У нас возникают проблемы со скоростью и памятью при прокрутке таблицы.

Мы подумали, можем ли мы вместо файлов sqlite получить CSV-файлы или другой формат получить лучшую производительность, чем sqlite? Я читал, что xml или json не помогут, так как количество записей слишком велико, а время анализа увеличится.

Пожалуйста, предложите.

Ответы [ 3 ]

2 голосов
/ 08 января 2011

Во-первых, не думайте, что SQLite - это ваше узкое место.Я сделал такое же предположение в своем собственном приложении и потратил дни, пытаясь оптимизировать доступ к базе данных, только для того, чтобы запустить Instruments против нее и обнаружить, что в моем интерфейсе была медленная процедура обработки строк, которая приводила к сбою.

Сначала используйте Time Profiler и Object Allocations, чтобы проверить, где находятся ваши горячие точки в коде.SQLite смехотворно быстр.

Тем не менее, при 4000 строках вы, вероятно, столкнетесь с проблемами памяти, по крайней мере, если попытаетесь загрузить все из них в массив для отображения на экране.Я рекомендую импортировать эти данные в базу данных Core Data SQLite и использовать NSFetchedResultsController с размером пакета, установленным для его запроса на выборку, который будет немного больше, чем число строк, отображаемых на экране.

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

0 голосов
/ 08 января 2011

Это будет зависеть от приложения, от того, как вы используете и запрашиваете данные.Профилируйте его, подтвердите, что sqlite является или не является проблемой.Затем атакуйте все, что поднимает профилирование.

Профилировщики: Акула Или какое-то другое решение для профилирования

0 голосов
/ 08 января 2011

Правильно проиндексированная база данных SQLite будет вращаться вокруг любого плоского файла, особенно если у вас много записей. Также попробуйте объединить эти 10 файлов в одну базу данных, чтобы вы могли выполнять объединения индексированных столбцов и использовать хитрые приемы, такие как представления. Сейчас кажется, что вы извлекаете данные из 10 различных баз данных и сравниваете / обрабатываете их вручную, что, конечно, потребовало бы много времени и памяти.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...