是否有任何明显的原因可以解释为什么通过实体模型调用存储过程会导致性能比直接调用慢得多?
首先,我不希望 SP 运行在exactly相同的速度,我知道 EF 必须做的许多事情在直接访问 SP 时不会被调用。
除此之外,我有一个返回三列字符串的查询。当我通过企业管理器执行它时,它几乎立即运行。如果我通过 EF 运行它,则大约需要六秒钟。当然,结果被映射到复杂类型,但是当我通过 SQL Server Profiler 运行查询时,可以清楚地看到延迟发生在 SQL Server 上:
在图中,1 表示从 Enterprise Manager 调用 SQL,2 表示使用 EF 通过我的应用程序调用 SQL。
我在这里做错了什么明显的事情吗?我预计可能会有一两秒的延迟,但差异似乎太大了。
EDIT:
通过 ADO.Net 调用时,存储过程似乎也运行缓慢。我的同事似乎认为这与 .Net 缓存的错误执行计划有关。通过编辑存储过程并再次保存,似乎清除了缓存中的所有内容,并且 ADO.Net 和 EF 对存储过程的调用都运行良好。
以前有其他人遇到过类似的事情吗?
看一眼SQL Server 论坛上的此主题 http://social.msdn.microsoft.com/Forums/en-US/sqldataaccess/thread/6e5353b9-4837-4022-a535-5408ed6f852a/。有点相似,也许能提供一些线索。简而言之,SSMS 和 ADO.NET 中可能有不同的 SQL Server 执行环境选项,从而导致不同的执行计划。清除 SQL Server 计划缓存应该会有所帮助。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)