使用 coredata 优化 sqlite 的时间访问
我正在尝试使用预生成的 sqlite 文件,其中包含表中的 10 000 个对象。
我已经使用 iPhone 模拟器在 sqlite 中使用 coredata 创建并添加了对象。
我已将 iPhone Simulator 资源文件夹(包含 10 000 个对象)中包含的 sqlite 复制并粘贴到项目目录中的资源文件夹中。
我在第一次启动我的应用程序时所做的是将这个生成的数据库复制到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 个对象)的访问与新副本进行比较,对表的所有访问所花费的时间是正常生成的 MyBase.sqlite 的 3 倍。
我想知道在模拟器上生成sqlite时,索引属性是否不存在? 我需要帮助!
I'm trying to use a pre-generated sqlite file containing 10 000 objects in a table.
I've created and added objects, with iPhone simulator, in the sqlite using coredata.
I've copy and past the sqlite contained in iPhone Simulator ressource folder (containing 10 000 objects), into my ressource folder in my project directory.
What i do at first launch of my app, is copy this generated database into my app document directory on the iphone using :
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);
}
It works fine, but i have the following problem :
Comparing access to the original MyBase.sqlite (created on my device and filled with the same 10 000 objects) with the new copy, all access on tables take 3 times more time than on the normal generated MyBase.sqlite.
I wonder if when generating sqlite on simulator, indexed attribute does not exist?
I need help!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您使用的是相当常见的技术,通常不会导致任何问题。如果新创建的商店和旧商店使用相同的数据模型,则 Core Data 无法区分这两个商店。
我能想到的唯一解释是您正在使用两个不同的系统/API 版本,因此存储文件略有不同。如果设备上的版本比模拟器上的版本旧/新,您可能会遇到问题。
这只是一个疯狂的猜测。
Your using a fairly common technique and it does not normally cause any issues. Core Data cannot tell the difference between a store just created and an old one if both stores use the same data model.
The only explanation I can think of is that you are using two different system/API versions such that the store file is subtly different. If the version on device is older/newer than the version on simulator you might have problems.
That's just a wild guess.