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)