2006/01/26

ADO.NETでのデータ取得を高速化するためのヒント


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 ではブログにはない、いろんな情報を発信しています。


コメント

でもデータセットは取得した後が楽だからなぁ。。。

kawaさん、コメントありがとうございます。そうなんですよねぇ。DataSetの方が使いやすいんですよね。コネクションを閉じた状態でデータ操作できますし。実際、今のプロジェクトでもDataSetを使ってます。システムが階層に別れているので、それしか選択肢がながなかったという話もありますが。。。

このCodeZineの記事ですが未だに誤解を招く原因となっているようですね。
データベースよりデータを取得するのにかかる時間の比較ではなく、取得したデータからDataTableを生成する時間を計測しているのに過ぎません。
はっきりいって、それほど大量のデータでないかぎり、メモリ、CPU性能で十分吸収できる部分です。

>>ヘンリーさん

コメントありがとうございます。確かにデータベースからデータ取得部分はあまり時間は変わらなそうですね。

特にこの記事を読んだ頃は、ADO などのデータアクセス方法と DataSet のデータアクセス方法が大きく違っていて、DataSet に多少ネガティブな部分もあり思い込みがあったかもしれません。

コメントを書く



プロフィール

  • 名前:fnya
    経歴:
    SE としての経験は15年以上。様々な言語と環境で業務系システム開発を行い、セキュリティ対策などもしていました。現在は趣味SE。

    Twitter では、ブログでは取り上げない情報も公開しています。


    ブログについて

    このブログは、IT、スマートフォン、タブレット、システム開発などに関するさまざまな話題を取り上げたり、雑感などをつづっています。

    現在、Enty で支援を受け付けています。もしよければご支援ください。



    >>ブログ詳細
    >>自作ツール
    >>運営サイト
    >>Windows 10 まとめ

    Twitter のフォローはこちらから Facebook ページはこちら Google+ページはこちら RSSフィードのご登録はこちらから