C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト


(過去ログ 142 を表示中)
■83132 / )  Re[1]: ADO.netの接続形態別の速度の違いについて
□投稿者/ 魔界の仮面弁士 (1168回)-(2017/03/07(Tue) 17:10:13)
2017/03/07(Tue) 17:19:08 編集(投稿者)

No83130 (大谷刑部 さん) に返信
> 旧ADOの時代は、OLEDBProviderとODBC経由では速度に明らかに違いがありました。

Update が若干早いものの MoveNext がヤケに遅いとか、何か違いがあった気がしますが
今となってはすっかり忘却の彼方です…。orz


> Oracle(8iの時代に)で比較実験をしたことがあるのですが、

MSDAORA
OraOLEDB.Oracle
ODBC(MSDASQL) + Microsoft Oracle Driver
ODBC(MSDASQL) + Oracle ODBC Driver
ODBC(MSDASQL) + Merant/DataDirect ODBC Driver

などなど、色々な組み合わせがありましたね。
サードパーティ製の ODBC Driver や OLE DB Provider もありましたし。


> その当時のOLEDBProviderとODBC経由の差はオブジェクト階層が一階層多いからと説明されていた文書並びにサイトが
> 多かったように記憶しています。

ミドルウェアの階層ですね。

DAO Workspace - Jet Engine - ODBC API - Net8 - Oracle
DAO(ODBCDirect) - ODBC API - Net8 - Oracle
RDO - ODBC API - Net8 - Oracle
ADODB - OLEDB(MSDASQL) - ODBC API - Net8 - Oracle
ADODB - OLEDB(MSDAORA) - Net8 - Oracle
ADODB - OLEDB(OraOLEDB.Oracle) - Net8 - Oracle
OO4O - Net8 - Oracle

# http://pcdn.int21.co.jp/pcdn/vb/howto/oracle.html
# http://www.int21.co.jp/directmw/DirectMw.html


Jet の ODBC リンクテーブルだと、スキーマ情報がローカルキャッシュされるので
ADODB よりもむしろ高速になるケースもあったと記憶しています。といっても、カーソル処理が
ローカル側で行われる分、処理によっては逆に低速にもなりえるのですが。



> ADO.netでの場合、そのあたりの違いは、どの程度なのでしょうか?

対 Oracle 向けの ADO.NET 実装というと、主要なところでは
下記の組み合わせが思い当たります。

1〜4 については、OLE DB Provider 層や ODBC 層を経由することに
なってしまいますので、現行バージョンなら 6 か 7 を使うのがお奨めです。
特に OLE DB 層は、今後縮小傾向にあるようですし。

0) Microsoft.Data.Odbc + Oracle ODBC Driver/Microsoft Oracle Driver
1) System.Data.Odbc + Oracle ODBC Driver
2) System.Data.Odbc + Microsoft Oracle Driver
3) System.Data.OleDb + MSDAORA
4) System.Data.OleDb + OraOLEDB.Oracle
5) System.Data.OracleClient
6) Oracle.DataAccess.Client
7) Oracle.ManagedDataAccess


7 は XCOPY 配置で動作するので、実行環境への配置が容易ですが、
12c で登場したばかりで歴史が浅いです。

機能面で比較すると 6 の方が優れていますが、バージョン互換性に問題があるため、
複数人での開発(特に複数の Oracle バージョンを扱う開発チーム)では注意が必要です。
http://d.hatena.ne.jp/atsukanrock/20090519/1242721158

5 については、Oracle Client 8.1.7 以降さえあれば使えるので配置は容易ですが、
.NET 4 以降では廃止(Obsolete)扱いにもなっており、現在は非推奨な方式となっています。

3 はそもそも、Oracle 8i までのサポートしかありません(9i 以降に繋げないわけでは無いですが)。


> SQLServerはOLEDBProvider経由、

対 SQL Server への接続案なら、.NET からは基本的に
System.Data.SqlClient 一択です。(Compact なら System.Data.SqlServerCe)

しかし ActiveX 系での接続については、もはや OLE DB Provider は
推奨されていません。SQL Server 2012 を最後に OLE DB Provider が
提供されなくなり、現行バージョンでは ODBC が推奨されるという
逆転現象が発生しています。

https://blogs.msdn.microsoft.com/sqlnativeclient/2011/08/29/microsoft
https://blogs.msdn.microsoft.com/dataplatjp/2016/06/16/sql-server
返信 編集キー/


管理者用

- Child Tree -