2011年08月23日
やっぱりDBがらみかぁ〜
アプリで色々な所の処理時間計ったところDBで3万5千レコード以上のテーブル「ComiketCircle」が
絡んでいる所で時間が、かかってるのが確認できた(=д=;)
実際の処理結果では、
「ComiketCircle」参照有り
long start = System.currentTimeMillis();
//エリア情報を配列にする
String sql = "select db2.* from ComiketCircle as db1" +
" left join ComiketBlock as db2 on db1.blockId = db2.id" +
" where db1.day = " + (date_i + 1) +
" GROUP BY db2.id" +
" order by db2.id";
//エリア情報を取得するSQL実行
Cursor c1 = db.rawQuery(sql, null);
for_count = c1.getCount(); //2011.08.22 追加 メモ:高速化対策
c1.moveToFirst(); //先頭に移動
//配列にブロックIDとブロック名セット
//for( i = 0 ; i < c1.getCount();i++){
for( i = 0 ; i < for_count;i++){
block_id_list.add(c1.getInt(1)); //id INTEGER not null, -- ブロックID
block_name_list.add(c1.getString(2)); //name CHAR(2), -- ブロック名
c1.moveToNext();
}
c1.close();
c1 = null; //2011.08.22 追加
long stop = System.currentTimeMillis();
Log.i("DB_time_cat1", (stop - start )+"ms");
上記の実行ログ
08-23 09:35:07.155: INFO/DB_time_cat1(5158): 10809ms
-------------------------------------------------------
「ComiketCircle」参照無し
long start = System.currentTimeMillis();
String sql = "select db1.* from ComiketBlock as db1";
//エリア情報を取得するSQL実行
Cursor c1 = db.rawQuery(sql, null);
for_count = c1.getCount(); //2011.08.22 追加 メモ:高速化対策
c1.moveToFirst(); //先頭に移動
//配列にブロックIDとブロック名セット
//for( i = 0 ; i < c1.getCount();i++){
for( i = 0 ; i < for_count;i++){
block_id_list.add(c1.getInt(1)); //id INTEGER not null, -- ブロックID
block_name_list.add(c1.getString(2)); //name CHAR(2), -- ブロック名
c1.moveToNext();
}
c1.close();
c1 = null; //2011.08.22 追加
long stop = System.currentTimeMillis();
Log.i("DB_time_cat1", (stop - start )+"ms");
上記の実行ログ
08-23 09:30:12.335: INFO/DB_time_cat1(4983): 17ms
スピナー用に配列にセットする処理しているのだが
処理時間は10809msと17ms。。。。何倍だ?w
ふむ、色々試してみたが元レコードの件数が多いと
レスポンスが落ちるねぇ(^^;)
さてさて、どうしたものかぁ
また調べるかぁ〜〜
しかし、だんだんロジック記述が煩雑になって来たなぁ〜〜〜っと
投稿者:秀at 22:14| さんでープログラム(Android編) | コメント(0) | トラックバック(0)