使用核心数据优化对sqlite的时间访问

时间:2011-03-15 10:03:05

标签: iphone sqlite optimization core-data time

我正在尝试在表中使用包含10 000个对象的预生成的sqlite文件。

我使用coredata在sqlite中创建并添加了使用iPhone模拟器的对象。

我将iPhone Simulator ressource文件夹(包含10 000个对象)中包含的sqlite复制并复制到项目目录中的ressource文件夹中。

首次启动我的应用程序时,我使用以下方法将生成的数据库复制到iphone上的app文档目录中:

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个对象)的访问权限,对表的所有访问所花费的时间比正常生成的MyBase.sqlite多3倍。

我想知道在模拟器上生成sqlite时,索引属性是否不存在? 我需要帮助!

1 个答案:

答案 0 :(得分:0)

您使用相当常见的技术,通常不会导致任何问题。如果两个商店使用相同的数据模型,Core Data无法区分刚创建的商店和旧商店。

我能想到的唯一解释是你正在使用两个不同的系统/ API版本,这样商店文件就会略有不同。如果设备上的版本比模拟器上的版本旧/更新,则可能会出现问题。

这只是一个疯狂的猜测。