在iPhone上广泛使用SQLite时,要记住哪些最佳做法?提示/技巧/便利因素均受到赞赏。
答案 0 :(得分:8)
我建议使用FMDB作为一个不错的Cocoa SQLite包装器。
答案 1 :(得分:8)
测量应用程序的内存占用量并查找仪器中的泄漏情况。然后在调用sqlite3_exec后尝试:
pragma cache_size=1
和/或
pragma synchronous=0
YMMV。有报告称性能提升,RAM使用量大幅减少,泄漏次数减少。但是,在不了解影响的情况下要小心进行调整(例如,synchronous
关闭刷新会使速度提高很多,但如果手机在错误的时间重启,可能会导致数据库损坏。 / p>
答案 2 :(得分:6)
脱离我的头顶:
或许不仅仅针对iPhone而是针对嵌入式设备,还有一些很棒的提示here。
此link适用于旧版本的SQLite,但仍然有用。
最后,这个Stack Question也有一些不错的信息。
我们目前使用带有.Net Compact Framework应用程序的SQLite,它的性能非常出色,我们花了一些时间进行优化,但并没有尽可能多。
祝你好运。
答案 3 :(得分:3)
我发现在复杂查询中获取我正在寻找的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在他的演讲中建议这种技巧: http://www.vimeo.com/4421498
我实际上从sqlitebooks中广泛使用了水合/脱水模式,这是该技术的超集。
答案 4 :(得分:1)
我很懒,喜欢尽可能地坚持核心代码,因此我喜欢ORM工具SQLitePersistentObjects:
http://code.google.com/p/sqlitepersistentobjects/
您使域模型对象继承自SQLitePersistentObject(确定有点干扰),然后您可以根据需要保留/检索对象。
坚持:
[person save];
重新加载它几乎一样容易。任何可持久化对象都会添加动态类方法以允许您进行搜索。因此,我们可以检索所有姓氏为“Smith”的Person对象,如下所示:
NSArray *people = [PersistablePerson findByLastName:@"Smith"];
答案 5 :(得分:0)
我尚未尝试过的另一个选项是Core Data(需要成为Apple iphone开发者),虽然它是一个3.0功能,所以这取决于你的应用程序是否是一个选项..
答案 6 :(得分:0)
PLDatabase是FMDB的替代方案:http://code.google.com/p/pldatabase/
我在我的一个项目中使用它没有问题。