在我的asp.net c#应用程序中,我使用实体框架4.0调用一个程序,我的问题是在实时网站上我收到超时问题(完成执行需要1分钟以上)
但是当我从管理工作室(sql server 2012)打电话时,相同的程序几乎不需要6秒(即使使用DBCC FREEPROCCACHE
和DBCC DROPCLEANBUFFERS
后)。
当调查问题时,发现当我使用实体框架调用程序时,读取次数很高。请选择两个屏幕截图。
实体框架调用跟踪..
我不确定为什么在使用Entity Framework进行调用时以及从Management studio调用相同的过程时,性能会有太大差异。
我想避免使用WITH RECOMPILE
选项,这是我们得到的几个主题的答案。
任何人都可以帮助我,这是什么原因以及处理这种情况的理想方式是什么?
答案 0 :(得分:1)
建议with recompile
的原因是它是纠正问题的方法之一。这看起来像是一个参数嗅探问题,所提到的方法是解决它的一种方法。有关参数嗅探的信息:
您可以看到EF和SSMS之间存在这种差异的原因是由于在从Web调用时自动传入查询选项(无论是来自EF还是ADO等) - 尤其是ANSI_NULLs
和/或{ {1}}。
减轻参数嗅探的方法取自:
禁用特定SQL Server查询的参数嗅探
我不认为它已在上面的文章中列出,但在2008年及以上,您可以使用quoted_identifier
- 与上面列表中的3相关,但结果更好(可能)