Оптимизируйте время доступа к sqlite с помощью coredata - PullRequest
1 голос
/ 15 марта 2011

Я пытаюсь использовать предварительно сгенерированный файл sqlite, содержащий 10 000 объектов в таблице.

Я создал и добавил объекты с помощью симулятора iPhone в sqlite с использованием coredata.

Я скопировал и прошёл sqlite, содержащийся в папке ресурсов iPhone Simulator (содержащей 10 000 объектов), в мою папку ресурсов в папке моего проекта.

Что я делаю при первом запуске моего приложения, это скопирую эту сгенерированную базу данных в каталог документов моего приложения на iphone, используя:

NSBundle * mainBundle = [NSBundle mainBundle];
        NSString *oldPath = [mainBundle pathForResource:@"MyBase" ofType:@"sqlite"];
        NSString *newPath = [[app_delegate applicationDocumentsDirectory] stringByAppendingPathComponent: @"MyBase.sqlite"];
        BOOL copied = [[NSFileManager defaultManager] copyItemAtPath:oldPath toPath:newPath error:&error];
        if (!copied) {
            NSLog(@"Moving database from %@ to %@, error: %@", oldPath, newPath, error);
        }

Работает нормально, но у меня следующая проблема: Сравнивая доступ к исходному MyBase.sqlite (созданному на моем устройстве и заполненному теми же 10 000 объектов) с новой копией, весь доступ к таблицам занимает в 3 раза больше времени, чем к обычному сгенерированному MyBase.sqlite.

Интересно, если при создании sqlite на симуляторе индексированный атрибут не существует? Мне нужна помощь!

1 Ответ

0 голосов
/ 16 марта 2011

Вы используете довольно распространенную технику, и она обычно не вызывает никаких проблем.Базовые данные не могут отличить только что созданное хранилище от старого, если оба хранилища используют одну и ту же модель данных.

Единственное объяснение, которое я могу придумать, это то, что вы используете две разные версии системы / API, так что файл хранилища слегка отличается.Если версия на устройстве старше / новее, чем версия на симуляторе, у вас могут быть проблемы.

Это просто дикое предположение.

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