はじめに
本稿では、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つのクラスがあります。
Connection
Command
DataReader
DataAdapter
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
を使う際のパフォーマンス低下を計測してみたいと思います。