iPhone上的最佳SQLite实践
在iPhone上广泛使用SQLite时,需要记住哪些最佳实践?小贴士/技巧/便利因素都很受欢迎。我可以推荐将其用作精美的可可SQLite包装材料。切记:iPhone上的最佳SQLite实践,iphone,objective-c,cocoa-touch,sqlite,Iphone,Objective C,Cocoa Touch,Sqlite,在iPhone上广泛使用SQLite时,需要记住哪些最佳实践?小贴士/技巧/便利因素都很受欢迎。我可以推荐将其用作精美的可可SQLite包装材料。切记: 使用事务 确保您的SQL利用中的表 不要添加不完全确定需要的索引 也许不仅仅针对iPhone,对于嵌入式设备,还有一些很棒的技巧 这适用于较旧版本的SQLite,但仍然被证明是有用的 最后,这也有一些很好的信息 目前,我们在.Net Compact Framework应用程序中使用SQLite,它的性能非常出色,我们花了一些时间进行优化,但
- 使用事务
- 确保您的SQL利用中的表
- 不要添加不完全确定需要的索引
祝你好运。测量你的应用程序的内存占用,并检查仪器是否有泄漏。然后在调用sqlite3_exec后,使用以下命令进行尝试:
pragma缓存大小=1
pragma synchronous=0
synchronous
会关闭刷新功能,这会大大加快速度,但如果手机在错误的时间通电,可能会导致数据库损坏)
更多信息:我发现,在复杂的查询中只获取我要查找的ID,然后按需获取其余信息通常会更快 例如:
SELECT person_id
FROM persons
WHERE (complex where clause)
然后当每个人都被展示出来时,我会跑
SELECT first_name, last_name, birth_date, ...
FROM persons
WHERE person_id = @person_id
我通常会发现,这会使复杂的查询以1/2的时间运行,并且对给定人员的查找通常为2ms(这是在具有17k行的表上)
你的经历可能会有所不同,你应该自己计时
此外,我还要感谢Wil Shipley在他的演讲中提出了这种技巧:
实际上,我广泛使用了sqlitebooks中的水合/脱水模式,这是该技术的超集。我很懒,喜欢尽可能多地坚持核心代码,因此我喜欢ORM工具SQLitePersistentObjects: 您可以使域模型对象从SQLitePersistentObject继承(好的,有点侵入性),然后可以根据需要持久化/检索对象 坚持:
[person save];
把它装回去几乎同样容易。任何持久化对象都会添加动态类方法,以允许您进行搜索。因此,我们可以检索所有姓氏为“Smith”的Person对象,如下所示:
NSArray *people = [PersistablePerson findByLastName:@"Smith"];
我还没有尝试过的另一个选项是(必须是苹果iphone开发人员),尽管它是3.0功能,因此它取决于你的应用程序是否是一个选项。PLDatabase是FMDB的替代品:
我在我的一个项目中使用过它,没有问题。你确定它没有内存泄漏,使用安全吗?它当然不完整,而且显然不受支持。我说,使用CoreData并在性能变差时调整性能在查看我的应用程序是否存在漏洞时,我在库中从未发现任何漏洞。这可能是一个更好的链接+1。缓存大小可能会占用iphone上相当多的内存,我花了一段时间才发现。所有当前提交的应用程序都需要使用3.0 SDK构建,因此,我认为核心数据可能是最好的选择。据我所知,提交的应用程序不需要使用3.0构建,只需根据3.0进行测试:“所有提交到应用商店的应用程序都将在最新的iPhone OS 3.0测试版上进行审查。如果您提交的应用程序与iPhone OS 3.0不兼容,则不会获得批准。”