エンティティモデルを介してストアドプロシージャを呼び出すと、直接呼び出すよりもパフォーマンスが大幅に低下するという明らかな理由はありますか?
まず、SPがまったく同じ速度で実行されることは期待していません。また、SPに直接アクセスする場合には呼び出されない、EFが実行する必要のあるさまざまなことがあることを知っています。
それはさておき、3列の文字列を返すクエリがあります。Enterprise Managerを介して実行すると、ほぼ瞬時に実行されます。EF経由で実行すると、約6秒かかります。確かに、結果は複合型にマップされていますが、SQL Server Profilerを介してクエリを実行すると、SQLサーバーで遅延が発生していることがわかります。
この図では、1はEnterprise Managerから呼び出されているSQLを示し、2はEFを使用してアプリから呼び出されていることを示しています。
私がここで間違っていることは明らかですか?おそらく1、2秒の遅延が予想されますが、違いが大きすぎるようです。
編集:
ADO.Net経由で呼び出された場合、ストアドプロシージャの実行も遅いようです。私の同僚は、.Netがキャッシュしている悪い実行プランと関係があると考えているようです。ストアドプロシージャを編集して再度保存すると、キャッシュにあるものはすべてクリアされたように見え、ストアドプロシージャへのADO.NetとEFの両方の呼び出しが正常に機能します。
他の誰かが以前にこのような何かに遭遇したことがありますか?