【发布时间】:2013-02-08 15:07:38
【问题描述】:
我正在使用 ObjectSet 的方法在表中进行各种查询,即从中选择一些记录:
var results = Repository.Find(c => c.Enabled == 1).ToList();
这是我的存储库的 Find 方法:
public IEnumerable<T> Find(Func<T, bool> predicate)
{
try
{
return _objectSet.Where<T>(predicate);
}
catch
{
throw;
}
}
现在,如果目标表中有大约 1,000,000 条记录,我可以看到进程的内存使用量增长了很多,即使我正在执行的 Find 调用应该最多返回几条记录.
似乎所有的记录都被拉到客户端,然后被过滤。这显然不是我想要 LINQ 做的。
你觉得我在做什么明显有问题吗?
提前致谢。
【问题讨论】:
-
不要使用 IEnumerable
它会将每个数据行一次拉入内存,而不是您应该使用 IQueryable -
您的
Find方法根本没有任何成效。为什么不直接在Repository上使用Where? -
@MUG4N 他只是将它用于他的输出,应该已经被过滤了,所以这不是问题。
标签: c# database memory-management entity-framework-4 objectset