ADO.NETでのデータ取得を高速化するためのヒント
CodeZine の記事ですが、なかなか面白いのでご紹介します。
ADO.NETについて簡単な説明を行ってから、以下のもののベンチマークを比較してます。
・SQL Client Managed Provider
・DataSet
・DataReader
・OleDb Managed Provider
・DataReader
・DataSet
使っているデータベースはSQL Server2000になります。
SQL Clientで、10000件を取得するのにかかる時間は、DataSetはDataReaderのなんと30倍。圧倒的にDataReaderの方が速いですね。
そして、OleDbのDataReaderはSQL Client のDataReaderの10倍も時間がかかってしまいます。
さらに、OleDbのDataSetはOleDbのDataReaderの30倍の時間がかかってしまいます。
これを時間の比率であらわすと以下のようになります(DataReaderはDR、DataSetはDSと省略)。
SQL DR : SQL DS : Ole DR : Ole DS = 1 : 30 : 10 : 300
こんなに差があるというのは、結構な驚きです。
SQL Server を使用するなら SQL Client Managed Provider を使うのは当然だとしても、レスポンスが要求されるシステムでは、環境が許すならDataSetよりDataReaderを使うべきですね。
スポンサーリンク
Twitter ではブログにはない、いろんな情報を発信しています。
@fnyaさんをフォロー
でもデータセットは取得した後が楽だからなぁ。。。
投稿: kawa | 2006/01/27 09:12
kawaさん、コメントありがとうございます。そうなんですよねぇ。DataSetの方が使いやすいんですよね。コネクションを閉じた状態でデータ操作できますし。実際、今のプロジェクトでもDataSetを使ってます。システムが階層に別れているので、それしか選択肢がながなかったという話もありますが。。。
投稿: fnya | 2006/01/27 15:53
このCodeZineの記事ですが未だに誤解を招く原因となっているようですね。
データベースよりデータを取得するのにかかる時間の比較ではなく、取得したデータからDataTableを生成する時間を計測しているのに過ぎません。
はっきりいって、それほど大量のデータでないかぎり、メモリ、CPU性能で十分吸収できる部分です。
投稿: ヘンリー | 2008/11/09 00:50
>>ヘンリーさん
コメントありがとうございます。確かにデータベースからデータ取得部分はあまり時間は変わらなそうですね。
特にこの記事を読んだ頃は、ADO などのデータアクセス方法と DataSet のデータアクセス方法が大きく違っていて、DataSet に多少ネガティブな部分もあり思い込みがあったかもしれません。
投稿: fnya | 2008/11/09 01:04