加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-15 06:42:48 所属栏目:百科 来源:网络整理
导读:我有一个处理所有数据库方法的类,包括实体框架相关的东西. 当需要数据时,其他类可以调用此类中的方法,例如 public ListLocalDataObject GetData(int start,int end); 数据库使用LINQ to EF进行查询,调用类可以对数据进行迭代. 但由于其他类不能访问EF中的实
我有一个处理所有数据库方法的类,包括实体框架相关的东西.
当需要数据时,其他类可以调用此类中的方法,例如
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.将此设置与关闭代理创建相结合将导致不缓存实体,并且通过查询结果的迭代应始终仅加载单个实体化实体(不加载已加载实体的缓存).

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读