人生なんどとなくやってきた実測値計測。
今回はVB.NETOracleと接続しよう!でお届けされました。


とりあえず。
ODBCとOracleCliantでやってみた。
OracleCliantもSystem.Data.OracleClientと、
Oracle.DataAccess.Clientの2本立て。
(1)ODBC
(2)System.Data.OracleClient
(3)Oracle.DataAccess.Client
としましょう。


接続文字列はともかく、データ取得ロジックはまったく同じものを使い、
ConnectionやらDataReaderやらだけが異なる状況で

Select文発行→DataReader取得→画面用データに加工

までの一連のながれを作っておいた。


結論から言うと。
(2)=(3)>(1)
っという順で取得時間が短かった。


だいたい100回のループで多少丸めてこんな感じ。
(1)500〜550ミリ秒
(2)280〜350ミリ秒
(3)280〜350ミリ秒
接続時間でも同じような比で、単純にそのまま再接続する時間を計測したら、
(1)が30〜70ミリ秒ほどかかるのにたいし、(2)=(3)は0ミリとかになってた。
時間に幅があるのは計測回数が少ないからだろなと思いながらも
1回あたり3〜5秒ほどかかるのでまってらんないのでやめたヽ(´ー`)ノ


それよりも。
気になる点があった。
SubClassで実装するデータ取得ロジックで、SuperClassからのインタフェースに
DbDataReaderを使っている箇所と、OdbcDataReader、OracleDataReaderをそのまま使っているソースも比較してみたら。
何度ってもDbDataReaderのほうが実測値が早い。
インスタンスはSuperClassで作る。だから、(1)も(2)も検索後はそれぞれOdbcDataReader、OracleDataReaderを持っている。
SubClassがReader→画面用加工のソースを作る際の引数をわざわざDbDataReaderでやったのは
SubClassのImport文がSystem.Dataだけですむからだ。
Castに必要な時間とかしょうがねんじゃね?ってJavaでやってたときにそうだったのでそう思っていたら、違ってた。


仮説と実測異なるなら仮説が間違っている。もしくは測り方が間違っている。
って原則からすると仮説のほうのような気がする。
ん〜。

余談

Oracleインストール最中に設定ミスった端末があり。
端末からODBC設定すら出来なくなった環境があり。
そこから上記をやってみると、こんな結果がでた。
(1)ODBC接続設定が作れないので除外
(2)DBOpen時にTNSがないと言うエラー
(3)問題なくつながる
環境のPath設定も確認したけどおかしなところが見当たらず。
これまたなんでだろって思った。