为什么通过我的实体模型调用存储过程会导致性能比直接调用慢得多,有什么明显的原因吗?
首先,我不希望 SP 以完全相同的速度运行,而且我知道 EF 必须做的各种事情在直接访问 SP 时不会被调用。
除此之外,我有一个返回三列字符串的查询。当我通过 Enterprise Manager 执行它时,它几乎可以立即运行。如果我通过 EF 运行它,则大约需要六秒钟。当然,结果被映射为复杂类型,但是当我通过 SQL Server Profiler 运行查询时,可以清楚地看到延迟发生在 SQL Server 上:
在图中,1 表示从企业管理器调用的 SQL,2 表示它是通过我的应用程序使用 EF 调用的。
有什么明显的我做错了吗?我预计可能会延迟一两秒,但差异似乎太大了。
编辑:
似乎存储过程在通过 ADO.Net 调用时也运行缓慢。我的同事似乎认为这与 .Net 正在缓存的错误执行计划有关。通过编辑存储过程并再次保存它似乎清除了缓存中的所有内容,并且对存储过程的 ADO.Net 和 EF 调用都运行良好。
有没有其他人遇到过这样的事情?