アプリケーションには次のシーケンスがあります。
Bluetooth の PBAP を使用して、携帯電話から連絡先をダウンロードします。
これらの連絡先を SQLite で作成されたカスタム データベースに書き込みます。Zero-malloc オプションを使用して SQLite を構成し、ヒープとして使用する 1MB のバッファーを指定し、単一のトランザクションでのすべての行挿入などの他の最適化も使用して
PRAGMA journal_mode = MEMORY
、.PRAGMA synchronous = OFF
PRAGMA count_changes = OFF
データベースに書き込んだ後、データベースから連絡先を読み取り、すべての連絡先名の音声発音を作成しています。この音声発音アルゴリズムでは、動的メモリ割り当てが多すぎます。
ここで、上記の 3 つの手順を 1 回の実行で連続して 3 回繰り返すと、次の結果が得られます。
1 回目 :連絡先は 5 秒でダウンロードされ、データベースは 10 秒で作成されました。
2 回目 :連絡先は 5 秒でダウンロードされ、データベースは 60 秒で作成されました。
3 回目 :連絡先は 5 秒でダウンロードされ、データベースは 500 秒で作成されました。
今、アプリから音声発音の作成を削除し、もう一度 3 回繰り返しました。今、結果は
1 回目 :連絡先は 5 秒でダウンロードされ、データベースは 10 秒で作成されました。
2 回目 :連絡先は 5 秒でダウンロードされ、データベースは 10 秒で作成されました。
3 回目 :連絡先は 5 秒でダウンロードされ、データベースは 10 秒で作成されました。
発音の作成中にメモリが断片化され、次回以降の SQLite のパフォーマンスに影響を与えるという、発音の作成に関する問題が見つかりました。
しかし、SQLite 用に Heap を構成し、MEMSYS5 を有効にすると、断片化も影響を受けました。
この問題を解決するための提案をしてください。