はじめに
本稿では、ADO.NETを使ってデータにアクセスするいくつかの方法のベンチマーク評価を行います。このベンチマークの結果が、お使いのアプリケーションでデータアクセスを行う方法の参考になれば幸いです。本稿のねらいはADO.NETの説明ではありません。ADO.NETについては、役に立つ参考資料がMicrosoftから出ていますので、そちらを参照してください(PRC1または新しいヘルプファイルにあります)。ただし、ADO.NETの構造のごく簡単な紹介だけはしておきましょう。
ADO.NETの基本事項
ADO.NETは、データへのアクセスと操作を行う新しいアーキテクチャを提供します。VB6の頃のADOとはまったく別物です。ADO.NETにより、データアクセスおよびデータ操作の新しい方法が利用できます。
ADO.NETのコアとなる機能を提供するのがManaged ProviderとDataSetです。
1. Managed Provider
Managed Providerには、次の4つのクラスがあります。
ConnectionCommandDataReaderDataAdapter
ConnectionとCommandの両クラスは、旧バージョンのADOにあるものとほぼ同じです。Connectionクラスから派生したオブジェクトは、データソースへの接続に使用されます。また、Commandクラスの派生オブジェクトは、ストアドプロシージャの実行とパラメータ情報の設定、それにデータの修正と引渡しに使用されます。
DataReaderクラスは、データソースに対する読み取り専用で前方参照のみのアクセスを提供します。このオブジェクトについては、後でベンチマーク評価を行います。Managed Providerの最後のコンポーネントはDataAdapterクラスです。DataAdapterは、もう1つのコアコンポーネントであるDataSetがManaged Providerに接続するためのチャネルの役割を果たします。
2. DataSet
DataSetクラスは、メモリ内のDataTable、列、行、制約、およびリレーションで構成されています。また、DataSetクラスは、テーブル間のリレーションの設定、データの取得と更新を行うためのインターフェイスを提供します。DataSetが持つ最大のメリットの1つは、XmlDataDocumentとの同期がとれることでしょう。DataSetはXmlDataDocumentに対する階層的なアクセスをリアルタイムに行うことができます。
現時点では、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を使う際のパフォーマンス低下を計測してみたいと思います。
