c# – 使用Entity Framework和LINQ查询大型数据集时如何避免内存溢出

前端之家收集整理的这篇文章主要介绍了c# – 使用Entity Framework和LINQ查询大型数据集时如何避免内存溢出前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个处理所有数据库方法的类,包括实体框架相关的东西.
当需要数据时,其他类可以调用此类中的方法,例如
public List<LocalDataObject> GetData(int start,int end);

数据库使用LINQ to EF进行查询,调用类可以对数据进行迭代.
但由于其他类不能访问EF中的实体,因此我需要对查询执行“ToList()”操作,并将完整的数据集提取到内存中.

如果这个集合非常大(GB的10s-100s)会发生什么情况?

是否有更有效的迭代方式,仍然保持松耦合?

解决方法

在实体框架中使用大型数据集的正确方法是:

>使用EFv4和POCO对象 – 它将允许与上层共享对象,而不引入对实体框架的依赖
关闭代理创建/延迟加载,完全从对象上下文中分离POCO实体
>公开IQueryable< EntityType>允许上层更精确地指定查询,并限制从数据库加载的记录数
>在数据访问方法显示IQueryable时,会在ObjectQuery上设置MergeOption.NoTracking.将此设置与关闭代理创建相结合将导致不缓存实体,并且通过查询结果的迭代应始终仅加载单个实体化实体(不加载已加载实体的缓存).

在简单的情况下,您可以随时检查客户端是否询问太多记录,并且仅仅是启动异常或仅返回最大允许记录.

猜你在找的C#相关文章