LINQ DBcontext加载数据的时间太长

时间:2014-06-03 00:28:16

标签: c# linq entity-framework

当我在SQL Server Management Studio中执行我的存储过程时,它会在不到1秒的时间内返回结果,但是当我尝试通过LINQ和此代码加载数据时,最多需要5秒钟。有什么快速建议吗?

[global::System.Data.Linq.Mapping.FunctionAttribute(Name="dbo.SP_SELECT_MyData")]
public ISingleResult<SP_SELECT_MyDataResult> SP_SELECT_MyData([global::System.Data.Linq.Mapping.ParameterAttribute(DbType="VarChar(50)")] string bname)
{
    IExecuteResult result = this.ExecuteMethodCall(this, ((MethodInfo)(MethodInfo.GetCurrentMethod())), bname);
    return ((ISingleResult<SP_SELECT_MyDataResult>)(result.ReturnValue));
}

此行一直占用

IExecuteResult result = this.ExecuteMethodCall(this, ((MethodInfo)(MethodInfo.GetCurrentMethod())), bname);

2 个答案:

答案 0 :(得分:2)

感谢@Ulugbek Umirov提供link to good answer 这是由缓存中的BAD执行计划导致不使用索引引起的。通过在存储过程中使用WITH RECOMPILE来创建索引和禁用缓存选项可以大大提高性能。

通过使用全文搜索索引改进过滤选项进一步改进完善,因为像LIKE '%abc%'两侧的野生字符的运算符不能使用非聚簇索引,但全文搜索索引可以。

答案 1 :(得分:1)

我会评论,但还没有足够的声誉。

第二次运行得更快吗?如果是这样,那么您所描述的声音可以通过使用编译查询来解决,但根据这篇文章,编译的查询不适用于存储过程:http://aspguy.wordpress.com/2008/08/15/speed-up-linq-to-sql-with-compiled-linq-queries/

您可以在linq中编写查询并使用已编译的查询,还是必须在sproc中?