EF 中的异常 "Out of Memory"
Exception "Out of Memory" in EF
为了从数据库中检索符合某些条件的数据,我使用以下代码:
IEnumerable<Object> iEnumuDeclarations2 = ObjectDAO.Find(d => d.id == 1).ToList();
但是太慢了。最后发生内存不足异常
public IEnumerable<TEntity> Find(Func<TEntity, bool> predicate)
{
return DataContext.CreateObjectSet<TEntity>().Where<TEntity>(predicate);
}
请尝试这可能有效:
var iEnumuDeclarations2 = declaration_importationDAO.Where(d => d.id_service == id_service).ToList();
您应该使用 Expression<Func<TEntity, bool>>
而不是 Func<TEntity, bool>
区别在于,EF 可以解释表达式生成一个 SQL 查询,并在 mssql 服务器上执行它,你所做的本质上是将每个对象放入内存,然后查询本地对象,根据数据库的大小,它可能会导致内存不足异常,但仍然不太可能。但这至少解释了缓慢。
为了从数据库中检索符合某些条件的数据,我使用以下代码:
IEnumerable<Object> iEnumuDeclarations2 = ObjectDAO.Find(d => d.id == 1).ToList();
但是太慢了。最后发生内存不足异常
public IEnumerable<TEntity> Find(Func<TEntity, bool> predicate)
{
return DataContext.CreateObjectSet<TEntity>().Where<TEntity>(predicate);
}
请尝试这可能有效:
var iEnumuDeclarations2 = declaration_importationDAO.Where(d => d.id_service == id_service).ToList();
您应该使用 Expression<Func<TEntity, bool>>
而不是 Func<TEntity, bool>
区别在于,EF 可以解释表达式生成一个 SQL 查询,并在 mssql 服务器上执行它,你所做的本质上是将每个对象放入内存,然后查询本地对象,根据数据库的大小,它可能会导致内存不足异常,但仍然不太可能。但这至少解释了缓慢。