SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

japan.internet.com翻訳記事

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

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

  • X ポスト
  • このエントリーをはてなブックマークに追加

テスト内容

 .NETのRelease Candidate版を使って書いたVB.NETのアプリケーションを用いて、いくつかのベンチマークテストを行います。各テストを5回ずつ実施し、それぞれ1件、10件、100件、1000件、10,000件のレコードを取得します。第1シリーズのテストでは、SQL Serverのデータソースに対してSQLClient Managed Providerを使用します。第2シリーズのテストでは、同じSQL Serverデータベースに対してOleDb Managed Providerを使用します。

 このテストで使用したのは、1990年に米国の国勢調査結果で得られた姓のデータです。このテーブルには80,000件を超えるレコードがあり、各レコードには4つのフィールドがあります。このデータはSQL Server 2000データベースに納められています。

 実行したベンチマークの種類は次のとおりです。

SQLClient Managed ProviderDataReader
DataSet/DataTable
OleDb Managed ProviderDataReader
DataSet/DataTable

使用マシン

マザーボードSoyo Dragon Plus
メモリ512MB DDR RAM(クルーシャル)
プロセッサAMD XP 1.5GHZ
ハードディスクSeagate 40GB 7200

テスト結果

 SQLClient DataReaderによって1レコードを取得する場合は、0より大きな値が記録されることはほとんどありませんでした。データが100ナノ秒以内に返されたために、テストに記録されなかったのです。余談になりますが、ここで.NETのすばらしい新機能について触れておきましょう。現在では、ミリ秒(つまり1000分の1秒)単位での測定よりもずっと精度の高い、ティック数での測定を行うことができます。1ティックは100ナノ秒(1千万分の1秒)に相当します。ティックはSystem.DateTime構造体のプロパティになっています。なお、今回のテスト結果は、わかりやすさを考慮して秒単位に変換してありますが、ティック数の加算を考慮して、この10進表記を10,000,000番目の列に入れています。

 OleDb Managed ProviderのDataSetを使って10,000レコードを取得した場合が、すべてのテストのうちで最もパフォーマンスが悪く、911秒かかっています。

RecordsSQL Client DataReaderSQL Client DataTableOLEDB DataReaderOLEDB DataTable
10.00000000.08011520.00000000.1001440
100.00000000.10014400.2002880.9012960
200.00000000.18025920.1001441.9027360
300.01001440.28040320.1001442.8040320
400.01001440.37053280.1001443.7053280
500.01001440.47067680.2002884.7067680
600.01001440.56080640.2002885.6080640
700.02002880.65093600.2002886.5093600
800.02002880.74106560.2002887.4106560
900.02002880.84120960.3004328.3119520
1000.03004320.93133920.3004329.3133920
RecordsSQL Client DataReaderSQL Client DataTableOLEDB DataReaderOLEDB DataTable
1000.04005760.93133920.3004329.6138240
2000.06008641.78256300.60086417.8256300
3000.08011522.66383100.90129626.7384500
4000.11015843.55511201.10158435.5511200
5000.14020164.44639301.40201644.4639400
6000.17024485.33767501.80259253.3767500
7000.20028806.22895702.0028862.6901400
8000.23033127.12023802.30331271.1022400
9000.27038888.00150602.60374480.0150500
10000.29041768.89278702.90417688.9278700
RecordsSQL Client DataReaderSQL Client DataTableOLEDB DataReaderOLEDB DataTable
10000.30043208.96288803.10446490.5301700
20000.610878418.34638006.00864178.1562000
30000.931339226.77851009.113104267.3845000
40001.231771035.701340012.21757356.5126000
50001.522189044.654210015.42218446.0414000
60001.882707053.807370018.4265553.4959000
70002.193154063.511330021.03024636.4151000
80002.433499072.804690023.93442726.8452000
90002.763974081.787610027.43946832.7975000
100003.084435091.621740031.14478911.7110000

 この結果から、取得レコード数が10であっても10,000であっても、DataReaderに比べるとDataSet/DataTableのパフォーマンスがかなり低いことがわかります。DataReaderの方が高速なことは、驚くにはあたりませんが、DataReaderによるデータアクセスが、DataSetによるデータアクセスより27~56倍も高速なことには驚かされます。

 もう1つ興味深いことは、SQLClient Managed Providerが、同じデータソースにアクセスするOleDb Managed Providerより平均10倍も高速なことです。こうしたパフォーマンスの低さは、どのようなOleDbソースでも同じだと結論づけてよさそうです。

 開発者にとって大切なのは、パフォーマンスが最高であると同時に、信頼性が高く、スケーラブルなWebサイトを構築することです。DataReaderは、我々のニーズに最も合致した高パフォーマンスの方法です。そういうわけで、私と同じようなスピードマニアの方には、DataReaderをお勧めします。きっと満足していただけることでしょう。

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
japan.internet.com翻訳記事連載記事一覧

もっと読む

この記事の著者

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

japan.internet.com は、1999年9月にオープンした、日本初のネットビジネス専門ニュースサイト。月間2億以上のページビューを誇る米国 Jupitermedia Corporation (Nasdaq: JUPM) のニュースサイト internet.comEarthWeb.com からの最新記事を日本語に翻訳して掲載するとともに、日本独自のネットビジネス関連記事やレポートを配信。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

Craig Davis(Craig Davis)

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

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/277 2006/04/11 19:08

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング