[英]Memory management when using sqlite database in iphone
我的應用程序使用SQLite數據庫來存儲用戶的輸入。 輸入中的記錄數將大約為100條記錄,我在應用程序中進行了大量的SQL操作。
當我使用Object Allocations運行應用程序時,它會顯示sqlite庫libsqlite3.0.dylib占用大量內存。 libsqlite框架會導致內存泄漏嗎? 與數據庫通信的最佳方式是什么? 進行大量的SQL調用會增加我的應用程序的內存使用量。
有人可以讓我知道在應用程序中有效使用sqlite的最佳方法。 (我使用SQLiteBooks示例作為參考)
謝謝。
Sqlite為請求使用緩存。 關閉並重新打開數據庫,以釋放緩存。
除非你的記憶要求很高,否則你不應該在乎。
您可以在UIApplicationDelegate方法applicationDidReceiveMemoryWarning或UIViewController委托方法didReceiveMemoryWarning中捕獲關鍵條件
如果調用其中一個方法,請關閉並重新打開數據庫。
還有PRAGMA來修改緩存大小 。
當連續執行多次INSERT(> 1000)時,我已經在SQLite中使用了內存。 寫性能也很慢。 通過在事務中包裝執行INSERT的循環,幾乎完全消除了這些問題。 為了回答這個問題,我發布了一些示例代碼。
你真的想限制iphone應用程序中sqlite的緩存大小。 啟動應用程序並初始化數據庫時,運行如下命令:
const char *pragmaSql = "PRAGMA cache_size = 50";
if (sqlite3_exec(database, pragmaSql, NULL, NULL, NULL) != SQLITE_OK) {
NSAssert1(0, @"Error: failed to execute pragma statement with message '%s'.", sqlite3_errmsg(database));
}
這將阻止sqlite緩存您的查詢並慢慢消耗所有內存。
我之前因為索引不佳而有一個相對較大的數據庫時,我看到內存使用量激增。 如果您在數據庫中添加一些經過深思熟慮的索引,則可以快速輕松地在現實世界中恢復內存使用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.