2013-04-30 53 views
3

在使用EF 5.0和WCF数据服务对我的数据访问例程进行一些测试期间,我遇到了性能问题。我从一个WCF数据服务操作中执行以下的简单查询:增加检索到的记录数指数增加linq查询持续时间

var addresses = (from address in context.Addresses select address).Take(500); 
var addressList = addresses.ToList(); 

当我只需要500条记录,查询时间约为300毫秒。以1000条记录为例,查询时间为4秒。以2000条记录查询时间为24秒。记录约6000条记录,查询时间为360秒或更长。

当我执行由Sql Server Management Studio中EF生成的sql语句时,6000记录查询基本上是瞬时的。

可以配置哪些设置以消除此性能问题?

+0

如果不需要改变,然后跟踪你可以尝试调用'.AsNoTracking()'您'DbQuery'所以你不要没有ObjectStateManager的开销。 – 2013-05-01 01:28:41

回答

1

这是一个只读操作(例如显示在网格中)还是需要更新从数据库中检索的实体?

如果您不需要更新实体,那么您应该使用.AsNoTracking()方法 - 这意味着实体框架不会尝试跟踪实体的任何更改。尝试是这样的:

var addressList = context.Addresses.AsNoTracking().Take(500).ToList(); 

推荐阅读:

Entity Framework and AsNoTracking

+0

感谢您的回复,但使用AsNoTracking对查询执行时间没有明显影响。我相信时间过长是由EF或WCF数据服务中的一些有限资源造成的,但我不知道哪些或者如何重新配置​​它们。 – 2013-05-01 11:20:47

+0

瑞,我错了。我用AsNoTracking重新运行测试,2000条记录只花了14毫秒。谢谢你的帮助。 – 2013-05-01 12:47:01

+0

我很高兴我能帮上忙。如果您认为我的回答很有用,请将其标记为正确答案并/或将其提升。谢谢 – 2013-05-01 12:48:34