- PR -

JDBCの処理速度

投稿者投稿内容
nori
会議室デビュー日: 2004/10/06
投稿数: 4
投稿日時: 2004-10-06 17:15
raystar殿、かつのり殿
返答ありがとうございます。

コンディションは、同じだと思うのですが・・・
あまり、自信がありません。
コンディションなどを見直して詳細に時間の計測をしてみます。
明日、また報告させていただきます。

tak3
ベテラン
会議室デビュー日: 2004/04/15
投稿数: 80
お住まい・勤務地: 菜の花・銀杏
投稿日時: 2004-10-06 17:16
int ColumnCount = objRmd.getColumnCount();
をループの内側に記述して、結局毎回代入しているってオチは無いですよね?

あと、今回のケースでは関係ないと思いますが、
変数が、インスタンス変数、クラス変数の場合、ローカル変数に比べて変数へのアクセスが
遅くなるそうです。
taro
ぬし
会議室デビュー日: 2003/10/20
投稿数: 316
投稿日時: 2004-10-06 17:47
Win2000Pro+J2SDK1.4.2.05+DB2V8.1(type2接続)で3回ずつテストしてみましたが、
変数に代入したほうがわずかに早い程度でほとんど差はありませんでした。
当たり前ですが、JDBCドライバの実装によって違うんですね。
# 250件の検索で代入あり:69秒、代入なし:70秒です。
nori
会議室デビュー日: 2004/10/06
投稿数: 4
投稿日時: 2004-10-07 15:41
皆さん、ありがとうございます。

引用:

tak3さんの書き込み (2004-10-06 17:16) より:
int ColumnCount = objRmd.getColumnCount();
をループの内側に記述して、結局毎回代入しているってオチは無いですよね?


それは、大丈夫でした。

皆さんのご指摘からプログラムを改善したところ変数を使う事による違いは感じられなくなりました。
(素人っぽく、お恥ずかしい限りです・・・)
今回、約3万件の検索を行っています。
当初、Stringを使った処理を行っていましたが、5000件に達するまで3分程度かかり、
検索スピードは件数が増えるにつれどんどん遅くなっていくため、実は最後まで検索を行った事はまだありません。
この時、変数を使った処理のほうが、明らかに早く処理速度が低下した為、昨日質問させていただきました。

以下は改善の結果です。時間はデータベース(約3万件)の検索にかかった時間です。
StringからStringBufferへの変更後:約25秒
さらに「System.out.println(RecCount);」をコメント行にした場合:約6秒

今回の処理で、StringBufferがStringに比べここまで違いがあることに大変驚きました。
また、コンソールへの書き出しも思いのほか負荷がかかっているものなのですね。
当初の疑問は、まだ解決していないのですがStringBufferとStringの違いを調べながら
勉強してみたいと思います。
みなさん、大変ありがとうございました。

スキルアップ/キャリアアップ(JOB@IT)