3

Data Access Application ブロックを呼び出すときの非常に奇妙な速度低下。

呼び出している SP ("QuestionsToBeAnswered") は、3 つの列 (2 つの GUID と整数: 21AF77DA-2E76-47DB-AB54-0E5C85CD9AD8、21AF77DA-2E76-47DB-AB54-0E5C85CD9AF0、2) を含む 58 行を 1 秒未満で返します。サーバー上で直接実行されます。私の SQL の経験はかなり良好で、SQL サーバーには問題が存在しないと確信しています。

ただし、DAAB を介して呼び出されると、オブジェクトのコレクションを返すのに非常に長い時間がかかります。ExecuteSprocAccessor(...) は通常 IEnumerable を返し、SP はコレクションが列挙されるか消費されるまで実行されないため、この問題は消費が発生するまで現れません。

DatabaseInstance.ExecuteSprocAccessor<T>(storedProcedure, rowMapper, args);

同じコードが 200 行を超えるかなり複雑な情報を問題なく返すことを考えると、なぜこのコードの実行にこれほど長い時間 (55 秒!) かかるのか、私は困惑しています。

どんなアイデアでも大歓迎です...

4

1 に答える 1

0

DAAB を使用して実行したときに実際の呼び出しがどのように見えるかを確認するために、SQL プロファイラーを実行してみてください。それを手にして、それが使用している実行計画を見てみましょう。

過去に、SQL クエリとしては正常に動作するが、ストアド プロシージャとしては非常に遅いコードを書きました。クエリ オプティマイザが SQL クエリとストアド プロシージャに対して異なる実行プランを使用していたいくつかの重複したインデックスに対して行うことが判明しました。インデックスをソートした後、両方とも同じ高速で実行されました。

于 2013-09-11T21:41:42.890 に答える