【发布时间】:2009-09-29 03:03:56
【问题描述】:
我正在使用 SQLite 数据库,我需要大约 15-20 个查询来与数据库通信和提取数据。我正在做的是准备这个查询,同时分配一个负责与数据库通信的 DBPersistence 对象。这个 DBPersistence 是一个单例类。
我的运行时内存消耗几乎是 3MB,因此我收到了内存警告。我会在使用后正确重置每个准备好的语句。
除了使用 FMDB 或 CoreData 之外,还有什么方法可以减少内存消耗?
【问题讨论】:
我正在使用 SQLite 数据库,我需要大约 15-20 个查询来与数据库通信和提取数据。我正在做的是准备这个查询,同时分配一个负责与数据库通信的 DBPersistence 对象。这个 DBPersistence 是一个单例类。
我的运行时内存消耗几乎是 3MB,因此我收到了内存警告。我会在使用后正确重置每个准备好的语句。
除了使用 FMDB 或 CoreData 之外,还有什么方法可以减少内存消耗?
【问题讨论】:
每个 sqlite 准备好的语句本身不应该占用超过几百个字节(嗯,这是一个典型准备好的语句,当然你可以从几千个字符开始具有数百个变量的 SQL,这会破坏事情,但我假设你是理智的;-)。所以 15-20 个这样的语句应该占用几个 KB;我怀疑他们能解释你的兆字节的浪费(我不知道如何检查 iPhone 上的内存占用了哪些内存,我依靠 SQLite 的更普通的部署环境来衡量这些信封数字的背面,我想 iPhone 的SQLite 准备好的语句的内存消耗是可比的)。我建议你应该在别处寻找你过多的内存消耗的来源。
【讨论】:
你是在完成查询执行后调用 sqlite3_finalize 吗?它释放它从准备好的语句中创建的内存。这种情况经常发生。
【讨论】: