<< 前のエントリトップページ次のエントリ >>
2011年09月19日

resetじゃなくfinalizeなのかぁ

ふむ
先日のJNIでSQLietを使って
ダンプを取込む処理で落ちてた件が解決しましたぁ

まぁ〜原因はメモリーリークかなぁ

まあ、そう思ってSQL(SQLステートメント(st))使った後に
リセット(sqlite3_reset)してみた
こんな感じ

rc = sqlite3_prepare_v2(db, fs1, -1, &st, NULL);
rc = sqlite3_step(st);
sqlite3_reset(st);

だがエラーが出る(^^;)

それで
DB閉じる前にやっていた
ファイナライズ(sqlite3_finalize)を
リセットの場所に入れてみた

sqlite3_finalize(st);

ハイ落ちなくなりましたww
ふむ

勘違いだったのは
sqlite3_resetはSQLを
再実行出来る様にする為で
あって
確保したメモリー領域を再利用する訳じゃないのね

なのでsqlite3_finalizeで解放しないと
永遠とメモリーに放置されるのねぇ(^^;)

まあ
SQL再利用しない場合は

sqlite3_prepare_v2
sqlite3_step
sqlite3_finalize

の3点セットで行わないと
メモリーにゴミが溜まるのねぇ〜
はい勉強になりましたw

あぁ〜あと実行結果は
(3回計測)

09-18 17:57:32.465: INFO/DB_v2dump(11610): 9233ms
09-18 17:58:13.805: INFO/DB_v3reload(11610): 41339ms

09-18 17:59:08.895: INFO/DB_v2dump(11610): 9234ms
09-18 17:59:47.177: INFO/DB_v3reload(11610): 38280ms

09-18 18:01:47.805: INFO/DB_v2dump(11610): 8554ms
09-18 18:02:26.456: INFO/DB_v3reload(11610): 38653ms

速いなぁw
40秒弱かぁ
Javaでは100秒弱だったし
約半分かぁ〜

ただ
DBのVerUPだけなら、このままで正しいのだが
文字コードが元のままで
「SJIS」から「UTF-8」に変換掛けてないので、
その処理入れないとAndroidでは
漢字とか文字化けするのよねぇ〜

さて本番ロジックに取込む前に
そこら辺もテストロジックで組んでみるかなぁ〜〜

投稿者:秀at 03:45| さんでープログラム(Android編) | コメント(0) | トラックバック(0)

◆この記事へのトラックバックURL:

http://control.onair-blog.jp/util/tb.php?us_no=1924&bl_id=1924&et_id=190203

◆この記事へのコメント:

※必須