2010-11-08 45 views
1

我們正試圖在我們的應用程序集成的SQLite,並試圖填充作爲高速緩存。我們計劃將它用作內存數據庫。第一次使用它。我們的應用程序是基於C++的。SQLite的異常內存使用

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

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

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

問:有沒有辦法在內存中查找數據庫的大小?

當我在磁盤上創建數據庫時,數據庫大小總和爲〜40MB。但是應用程序的內存使用率仍然很高。 問:是否有這種高使用率的原因。所有的緩衝區都被清除了,並且在數據庫不在內存之前就已經說過了。

任何幫助深表感謝。

感謝和問候 薩欽

回答

0

的幾個問題浮現在腦海中......

什麼是每條記錄的大小?

你有內存泄漏檢測工具爲您的平臺?

我使用的SQLite在類似於你如何使用它的方式幾資源有限的環境和修復bug是小,穩定,快速經過。 IIRC,目前還不清楚何時清理由SQLite的API使用的某些東西,當我們使用的工具來查找內存泄漏是很容易看到問題出在哪裏了。

+0

它應該達到1K。我也有Purify跑也。 – chingupt 2010-11-10 04:20:10

+0

但這裏的重點是,由於數據庫不在內存中,但在磁盤上,內存應該非常低。它不應該如此。如果內存使用率如此之高,那麼建議在內存數據庫中創建一個? – chingupt 2010-11-10 04:21:56

+1

嗨,奇怪的行爲。我沒有得到內存泄漏前衛。但我試過一件事。一旦內存增加,我嘗試關閉數據庫。內存只有輕微的下降。我甚至放棄了桌子,然後關閉了數據庫,但內存仍然很高。我怎樣才能讓sqlite釋放獲得的內存? – chingupt 2010-11-16 04:27:22

0

看到這個:

PRAGMA shrink_memory

該編譯導致在調用它以騰出儘可能多的內存,因爲它可以在數據庫連接,通過調用sqlite3_db_release_memory()。