.NetのOracleDataReaderでの大きなパフォーマンスの問題と同様の問題に直面しています。私のストアドプロシージャは、2つのクエリですべてユニオンを使用しています(それぞれがいくつかの結合を使用しています)。全体として、SPは10秒で約20Kレコードを返します。それは大丈夫に見えます。
しかし、dataReader.Read()がこれらのデータをフェッチするのに約4分かかるという、アプリケーション側の問題に直面しています。以下は私が現在使用しているコードです:
List<int> ordinalIndexes = new List<int>();
foreach (string headerName in headerColumnMapping.Keys)
ordinalIndexes.Add(dataReader.GetOrdinal(headerColumnMapping[headerName].ToString()));
while (dataReader.Read())
{
foreach (var ordinalIndex in ordinalIndexes)
csvString.AppendFormat("\"{0}\"{1}", dataReader[ordinalIndex].ToString().Trim(), separator);
}
dataReader.Read()には、静かに簡単に(1ミリ秒未満で)処理されるチャンクが多数あることを確認しました。ただし、10〜35秒かかるものは他にもたくさんあります(1回の読み取りの場合)。
私は試した:
これに関する提案は非常に高く評価されています。
私の問題は、ストアドプロシージャを最適化することで解決しました。(SPのクエリに基づいて)いくつかのインデックスを追加したところ、全体的なパフォーマンスが大幅に向上しました。
アプリケーションレベルの変更に関するご意見をお寄せいただき、ありがとうございます。私の場合、DBのパフォーマンスが本当の原因でしたが。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加