Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
iPhone上的最佳SQLite实践_Iphone_Objective C_Cocoa Touch_Sqlite - Fatal编程技术网

iPhone上的最佳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,它的性能非常出色,我们花了一些时间进行优化,但

在iPhone上广泛使用SQLite时,需要记住哪些最佳实践?小贴士/技巧/便利因素都很受欢迎。

我可以推荐将其用作精美的可可SQLite包装材料。

切记:

  • 使用事务
  • 确保您的SQL利用中的表
  • 不要添加不完全确定需要的索引
也许不仅仅针对iPhone,对于嵌入式设备,还有一些很棒的技巧

这适用于较旧版本的SQLite,但仍然被证明是有用的

最后,这也有一些很好的信息

目前,我们在.Net Compact Framework应用程序中使用SQLite,它的性能非常出色,我们花了一些时间进行优化,但没有达到我们所能达到的程度


祝你好运。

测量你的应用程序的内存占用,并检查仪器是否有泄漏。然后在调用sqlite3_exec后,使用以下命令进行尝试:

  • pragma缓存大小=1
和/或

  • pragma synchronous=0
YMMV。有报告称,性能提高,RAM使用大幅减少,泄漏减少。但是,在不了解影响的情况下进行调整时要小心(例如,
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不兼容,则不会获得批准。”