我在基于SQLite的iPhone应用程序中使用临时表。性能不是所需的,所以我查看了各种候选优化。其中大多数都运作良好并具有预期效果。但是,我还想尝试moving the temporary tables from flash into memory看看是否有任何改进。
在实际设备上,我尝试使用以下方法进行配置:
PRAGMA temp_store = 2;
这些执行没有错误。但是,当我使用:
查询配置时PRAGMA temp_store;
未返回任何结果,因此我无法验证此配置是否有效。我可以阅读其他PRAGMA设置,例如'page_size'。谁能告诉我:
注意:我非常了解SDK 3.0中的核心数据,但我有充分的理由不使用它。
更新: jitter指出iPhone上的SQLite实例可能已编译为SQLITE_TEMP_STORE设置为始终使用临时文件。我不知道这个设置 - 有没有办法确认是这种情况?
答案 0 :(得分:1)
我不知道但是猜测他们用SQLITE_TEMP_STORE = 0编译了sqllite。并且还有另一个人试过这个并没有成功。 SQLite optimization on the iPhone
我自己无法尝试,但源中似乎也有sqlite3TempInMemory()
函数(src/main.c)。不知道你是否可以打电话。
如果是,则此函数返回true 应该使用主内存而不是 瞬态寻呼机的临时文件 文件和声明期刊。该 返回的值取决于的值 db-> temp_store(运行时参数)和 编译时的值 SQLITE_TEMP_STORE。下表 描述了之间的关系 这两个值和这个功能 返回值。
答案 1 :(得分:1)
我刚刚将SQLite源自己添加到我的项目中,因为至少iPhone OS 2.x上的SQLite不是线程安全的。