2009-06-22 122 views
1

我在基於SQLite的iPhone應用程序中使用臨時表。表現並非如此,所以我考慮了各種優化的候選人。其中大部分運作良好,並具有預期效果。不過,我也想試試moving the temporary tables from flash into memory看看有沒有什麼改進。SQLite中臨時表存儲在iPhone上

在實際的設備我嘗試使用這種配置:

PRAGMA temp_store = 2; 

這些執行沒有錯誤。然而,當我查詢使用配置:

PRAGMA temp_store; 

沒有結果返回,所以我無法驗證此配置生效。我可以閱讀其他PRAGMA設置,例如'page_size'。誰能告訴我:

  • 如果這是預期的行爲
  • 如果這是SQLite的一個不受支持的配置在iPhone
  • 如果這種優化將是毫無意義的iPhone,即使是可能的(因也許是硬件)
  • 我怎樣才能成功移動臨時表存儲到內存在這種情況下

注:我深知SDK 3.0中的核心數據,但我有很好的理由不使用它。

更新:抖動指出iPhone上的SQLite的實例可以被編譯與SQLITE_TEMP_STORE設置爲始終使用臨時文件。我不知道這個設置 - 有什麼方法可以證實這種情況?

+0

詳細說明您已經完成了哪些優化?什麼是使用場景。也許一些其他的技巧,然後在 – jitter 2009-06-22 13:51:43

回答

1

我剛剛將SQLite源自己添加到我的項目中,因爲至少在iPhone OS 2.x上的SQLite不是線程安全的。

1

我不知道,但猜測他們編譯SQLITE_TEMP_STORE = 0的sqllite。還有另一個人嘗試過這種方式,但沒有成功。 SQLite optimization on the iPhone

  • 列表項

我不能嘗試一下自己,但似乎有源太(src/main.c)一sqlite3TempInMemory()功能。不知道你是否可以打電話。如果 主內存應使用的 臨時文件瞬時尋呼機 文件和聲明期刊

此函數返回true。返回的 值取決於 db-> temp_store(運行時參數)和 的編譯時間值 SQLITE_TEMP_STORE的值。下表 描述了這兩個值的 和這個函數的返回值 之間的關係。

+1

飛來飛去這一切都成爲一個自我參照(鏈接到我的博客文章:-)我希望我忽略了一些東西。 – teabot 2009-06-22 13:57:23

+0

哈哈!!應該真的注意到了在stackoverflow flair中鏈接的頭像。 – jitter 2009-06-22 17:40:32