0

(ODP.NET)Oracle.DataAccessバージョン1.102.3.0をOracle 11gクライアントで使用しています。datareader を使用してデータを読み取る際に問題が発生しています。私のプロシージャは約 10000 レコードの ref_cursor を返しています。ただし、データのフェッチには約 30 ~ 40 秒かかります。パフォーマンスを向上させる可能性はありますか?

4

1 に答える 1

0

FetchSize を設定してみてください。

これは Procedure および RefCusor であるため、これらの操作を実行できます。

  • 実行リーダー
  • FetchSize を設定します -> 読み始める前にこれを行います
  • 結果を読む

上記の一連のアクションに従うと、行のサイズを取得できます。

例えば

int NumberOfRowsToFetchPerRoundTrip = 2000;

var reader  =cmd.ExecuteReader();
reader.FetchSize = reader.RowSize * NumberOfRowsToFetchPerRoundTrip;
while(reader.Read())
{
//Do something
}

これにより、往復の回数が減ります。フェッチ サイズはバイトなので、1024*1024 (1mb) などの任意の fetchSize を使用することもできます。ただし、行のサイズ * リクエストごとにフェッチする行数に基づいてフェッチすることをお勧めします。

さらに、接続文字列にパラメーターを設定します

Enlist=false;Self Tuning=False

これらの設定を使用すると、より一貫したパフォーマンスが得られるように見えますが、ODP/NET のバージョンごとに多少の違いがある場合があります。

于 2013-01-23T12:40:23.143 に答える