2

FMDBラッパーを介してアプリでsqliteを使用しています。

私のアプリのメモリ使用量は、VACUUMを呼び出す前は2.25MBです。

[myFmdb executeUpdate: @"VACUUM;" ];

あとは5.8MBで、メモリを取り戻すことができないようです。バキューム後、Instruments / Allocationsツールは、それぞれ1.5Kを割り当てるライブバイトを含む大量のsqlite3MemMalloc呼び出しを表示します。

データベースを閉じて再度開く(オプション)以外に、どうすればこれをクリーンアップできますか?

編集:データベース接続を閉じて再度開くと、メモリがクリアされます。誰かがこれについてさらに洞察を与えることができない限り、これは私の解決策です。

4

1 に答える 1

2

私はこの質問をsqlite-usersリストに投稿し、sqliteのキャッシュサイズを減らすことを提案する応答を受け取りました。これは、次のステートメントを実行することによって実行されます(必要に応じてサイズ値を調整します)。

pragma cache_size = 100

編集:SQLiteメモリを解放するためのもう1つの気の利いたトリックがあります。必ず#defineSQLITE_ENABLE_MEMORY_MANAGEMENTを実行してください。

ここに記載されています: http ://www.sqlite.org/c3ref/release_memory.html

int bytesReleased = sqlite3_release_memory( 0x7fffffff );
NSLog( @"sqlite freed %d bytes", bytesReleased );
于 2011-03-09T19:56:48.117 に答える