使用lambda表达式时内存不足

时间:2016-07-14 09:15:19

标签: c# oracle lambda

我使用lambda表达式来查询数据,每当我调试和查看内存时,内存连续增加。它可以使异常“System.OutOfMemoryException”。如何在完成执行lambda表达式时清除缓存内存?

public override IQueryable<TableA> GetList(Func<TableA, bool> conditon, bool isNoTracking = false)
{
    var result =  Context.TableA
        .Join(Context.TableB.AsNoTracking(), x => x.TYU_URICOMCODE, y => y.MACS_KOKYAKU_CODE, CreateOrder)
        .Where(conditon).AsQueryable();
    return result;        
}

1 个答案:

答案 0 :(得分:1)

我有一些怀疑:

  1. 您的CreateOrder副作用正在做一些耗尽内存的事情。请记住,每行都会返回。
  2. 您无意中从数据库中加载了所有行,然后使用内存中的LINQ方法来加入/过滤它。
  3. 请注意,在LINQ中特定于数据库的风格中,.Where()返回一个WhereIterator,它已经是可查询的,因此不需要构建新的可查询,并且还将进行内存分配。如果你不得不打电话给.AsQueryable()进行编译,那么你几乎肯定会对上面的猜疑#2犯规。