エンティティモデルを使用してストアドプロシージャを呼び出すと、それを直接呼び出しよりもパフォーマンスが低下するという明らかな理由はありますか?ストアドプロシージャとエンティティフレームワークのパフォーマンス
最初に、私はSPが正確にで動作するとは思っていません。そして、SPに直接アクセスするときにEFがしなければならない様々なことがあります。
これ以外にも、3列の文字列を返すクエリがあります。私がEnterprise Managerを介して実行すると、すぐに実行されます。私がEF経由で走らせると、約6秒かかります。確かに、この結果は複合型にマップされているが、私はSQL Serverプロファイラによるクエリを実行したら、それは遅延がSQLサーバー上で起こることを確認するためには明らかです:ダイアグラムで
、1 Enterprise ManagerからSQLが呼び出されたことを示します.2は、EFを使用してアプリケーションを介して呼び出されていることを示します。
私はここで間違っていますか?おそらく2〜2秒の遅れが予想されますが、その差はあまりにも大きいようです。
EDIT:
ADO.Net経由で呼び出されたときに、ストアドプロシージャも実行速度が遅いようです。私の同僚は、.Netがキャッシュしている悪い実行計画とは何かだと思っているようです。ストアドプロシージャを編集して再度保存すると、キャッシュにあったものがすべてクリアされたように見え、ストアドプロシージャへのADO.NetとEFの両方の呼び出しがうまく機能します。
これまでに他の誰かがこれに遭遇しましたか?
AFAIK、ADO.NETは** **キャッシュの実行計画ではありません。それはSQL Serverです。EFにはプランキャッシングの概念もありますが、DB演算子ではなくクエリのコンパイル(.NET式→T-SQL)を指します。 –
EFを使用してプロシージャを繰り返し実行すると、SSMSのT-SQLバッチによるプロシージャの繰り返し実行に比べて、より多くの時間がかかることが確認できますか? SQLプロファイラでこの不一致を観察していますか? –