CodeZine(コードジン)

特集ページ一覧

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

DataSetを使うことによるパフォーマンス低下の計測

  • ブックマーク
  • LINEで送る
  • このエントリーをはてなブックマークに追加
2006/01/24 12:00

Web開発者はスピードを大切にします。高速化したいのにADO.NETを使った最適なデータ取得の方法が分からないという方には、本稿の内容が参考になるでしょう。

目次

はじめに

 本稿では、ADO.NETを使ってデータにアクセスするいくつかの方法のベンチマーク評価を行います。このベンチマークの結果が、お使いのアプリケーションでデータアクセスを行う方法の参考になれば幸いです。本稿のねらいはADO.NETの説明ではありません。ADO.NETについては、役に立つ参考資料がMicrosoftから出ていますので、そちらを参照してください(PRC1または新しいヘルプファイルにあります)。ただし、ADO.NETの構造のごく簡単な紹介だけはしておきましょう。

ADO.NETの基本事項

 ADO.NETは、データへのアクセスと操作を行う新しいアーキテクチャを提供します。VB6の頃のADOとはまったく別物です。ADO.NETにより、データアクセスおよびデータ操作の新しい方法が利用できます。

 ADO.NETのコアとなる機能を提供するのがManaged ProviderDataSetです。

1. Managed Provider

 Managed Providerには、次の4つのクラスがあります。

  • Connection
  • Command
  • DataReader
  • DataAdapter

 ConnectionCommandの両クラスは、旧バージョンのADOにあるものとほぼ同じです。Connectionクラスから派生したオブジェクトは、データソースへの接続に使用されます。また、Commandクラスの派生オブジェクトは、ストアドプロシージャの実行とパラメータ情報の設定、それにデータの修正と引渡しに使用されます。

 DataReaderクラスは、データソースに対する読み取り専用で前方参照のみのアクセスを提供します。このオブジェクトについては、後でベンチマーク評価を行います。Managed Providerの最後のコンポーネントはDataAdapterクラスです。DataAdapterは、もう1つのコアコンポーネントであるDataSetがManaged Providerに接続するためのチャネルの役割を果たします。

2. DataSet

 DataSetクラスは、メモリ内のDataTable、列、行、制約、およびリレーションで構成されています。また、DataSetクラスは、テーブル間のリレーションの設定、データの取得と更新を行うためのインターフェイスを提供します。DataSetが持つ最大のメリットの1つは、XmlDataDocumentとの同期がとれることでしょう。DataSetXmlDataDocumentに対する階層的なアクセスをリアルタイムに行うことができます。

 現時点では、Managed Providerには2つのバージョンがあります。それぞれのバージョンは.NET Framework内の異なる名前空間によって表現されています。1つ目のSystem.Data.SQLClientは、SQL Server 7.0以降へのアクセス機能を提供します。2つ目のManaged ProviderはSystem.Data.OleDbという名前空間の内部にあり、どんなOleDbソースのアクセスにも使用できます。SQLClient Providerは、Microsoft SQL Serverのワイヤフォーマット(TDS)を利用しています。そのため、OleDbプロバイダを介してデータにアクセスするよりも優れたパフォーマンスが得られるはずです。後述のパフォーマンステストでは、両方の種類のManaged Providerについて測定を行います。

 ADO.NETの一般的な構造を図で示すと、次のようになります。

 この図では、データソースからデータを取得する2とおりの経路が示されています。1つ目は、Managed ProviderコンポーネントのDataReaderを介する経路です。2つ目はDataSetを通る経路で、Managed ProviderのDataAdapterクラスを介してデータソースにアクセスします。

 この堅牢なDataSetオブジェクトは、テーブル間のリレーション確立のような機能を実行するときに利用できます。DataReaderは、読み取り専用で前方参照のみのデータ取得を行います。本稿のテストでは、このDataReaderではなくDataSetを使う際のパフォーマンス低下を計測してみたいと思います。


  • ブックマーク
  • LINEで送る
  • このエントリーをはてなブックマークに追加

あなたにオススメ

著者プロフィール

  • Craig Davis(Craig Davis)

    11年の開発キャリアを持ち、そのうち6年はWeb開発に従事。現在はMicron社の重要技術部門のWeb開発マネージャとして勤務。電子メールの宛先はcraig@chilibean.com。

  • japan.internet.com(ジャパンインターネットコム)

    japan.internet.com は、1999年9月にオープンした、日本初のネットビジネス専門ニュースサイト。月間2億以上のページビューを誇る米国 Jupitermedia Corporation (Nasdaq: JUPM) のニュースサイト internet.com や EarthWeb.c...

バックナンバー

連載:japan.internet.com翻訳記事

もっと読む

All contents copyright © 2005-2021 Shoeisha Co., Ltd. All rights reserved. ver.1.5