【问题标题】:Temporary table store in SQLite on the iPhoneiPhone 上 SQLite 中的临时表存储
【发布时间】:2010-11-04 20:38:27
【问题描述】:

我在基于 SQLite 的 iPhone 应用程序中使用临时表。性能不符合要求,因此我查看了各种优化候选者。其中大多数都运作良好并取得了预期的效果。不过我也想试试moving the temporary tables from flash into memory看看有没有改善。

在实际设备上,我尝试使用以下方法进行配置:

PRAGMA temp_store = 2;

这些执行没有错误。但是,当我使用以下方式查询配置时:

PRAGMA temp_store;

没有返回任何结果,因此我无法验证此配置是否有效。我可以阅读其他 PRAGMA 设置,例如“page_size”。谁能告诉我:

  • 如果这是预期行为
  • 如果这是 iPhone 上 SQLite 中不受支持的配置
  • 如果这样的优化在 iPhone 上毫无意义,即使它是可能的(可能是由于硬件)
  • 如何在这种情况下成功地将临时表存储移动到内存中

注意:我非常了解 SDK 3.0 中的 Core Data,但我有充分的理由不使用它。

更新: jitter 指出 iPhone 上的 SQLite 实例可能已经编译了 SQLITE_TEMP_STORE 设置为始终使用临时文件。我不知道这个设置 - 有什么方法可以确认是这种情况吗?

【问题讨论】:

  • 详细说明您已经进行了哪些优化?以及使用场景是什么。也许其他一些技巧会飞进来

标签: iphone database optimization sqlite


【解决方案1】:

我自己刚刚将 SQLite 源添加到我的项目中,因为至少在 iPhone OS 2.x 上的 SQLite 不是线程安全的。

【讨论】:

【解决方案2】:

我不知道,但猜想他们用 SQLITE_TEMP_STORE=0 编译了 sqllite。还有另一个人尝试了这个但没有成功。 SQLite optimization on the iPhone

  • 列表项

我自己无法尝试,但源代码中似乎也有 sqlite3TempInMemory() 函数 (src/main.c)。不知道能不能这样称呼。

此函数在以下情况下返回 true 应该使用主内存而不是 临时寻呼机的临时文件 文件和报表日志。这 返回的值取决于 db->temp_store(运行时参数)和 的编译时间值 SQLITE_TEMP_STORE。下表 描述了之间的关系 这两个值和这个函数 返回值。

【讨论】:

  • 这一切都变得有点自我参照(链接到我的博客文章:-) 我希望我忽略了一些东西。
  • 哈哈!!真的应该注意到stackoverflow天赋中链接的头像。
  • 添加了您可能想尝试的函数调用
猜你喜欢
  • 1970-01-01
  • 2011-12-22
  • 2014-12-22
  • 1970-01-01
  • 1970-01-01
  • 2011-10-29
  • 1970-01-01
  • 2010-12-02
相关资源
最近更新 更多