2010-11-08 108 views
1

我們正在嘗試將SQLite集成到我們的應用程序中,並試圖填充爲緩存。我們計劃將它用作內存數據庫。第一次使用它。我們的應用程序是基於C++的。SQLite:ON磁盤與內存數據庫

我們的應用程序與主數據庫進行交互以獲取數據並執行大量操作。這些操作通常涉及一個相當龐大的表格。 我們複製此表中SQLite和以下是意見:

場數:60 數紀錄:1,00,000

隨着人口數據開始,應用程序的內存,極大地拍攝到從120MB〜1.4 GB。目前我們的應用程序處於閒置狀態,並沒有進行任何重大操作。但通常情況下,一旦操作開始,內存利用率就會上升。現在使用內存數據庫中的SQLite和這種高內存使用情況,我們認爲我們不會支持這些記錄。

當我在磁盤上創建數據庫時,數據庫大小總計爲〜40MB。但是應用程序的內存使用率仍然很高。

問:是否有這種高使用率的原因。所有的緩衝區都被清除了,並且在數據庫不在內存之前就已經說過了。

任何幫助將深表謝意。

感謝和問候 薩欽

+0

60個字段聽起來像電子表格。看看你的數據,看看規範化可以爲你節省一大堆空間。 – Emyr 2010-11-08 11:35:55

+0

聽起來像你有內存泄漏 – 2010-11-08 20:46:24

+0

你懷疑是哪裏泄漏?在SQLite或我們的應用程序?在我的應用程序中,結構和緩衝區正在被正確清理。 – chingupt 2010-11-10 04:26:34

回答

1

使用的SQLite比數據本身其他的事情的記憶。它不僅包含數據,還包含連接,準備語句,查詢緩存,查詢結果等。您可以在SQLite Memory Allocation上閱讀更多內容並對其進行調整。確保你正在銷燬你的對象(sqlite3_finalize()等)。

+0

謝謝。我想我會詳細看看這個,然後回到你身邊。 – chingupt 2010-11-10 04:27:24

2

您可以使用vacuum命令通過減小sqlite數據庫的大小來釋放內存。

如果您正在執行大量插入更新操作,那麼數據庫大小可能會增加。你可以使用真空命令釋放空間。

相關問題