加载实体时,Entity Framework 会生成多少个数据副本?

Posted

技术标签:

【中文标题】加载实体时,Entity Framework 会生成多少个数据副本?【英文标题】:How many copies of the data does Entity Framework make when loading an entity? 【发布时间】:2013-10-08 13:37:54 【问题描述】:

我接手了一个 Entity Framework 4.1 项目,在该项目中选择将大型 BLOB 存储在数据库中(最大 200MB)。这些 blob 通过 LINQ to Entities 在内存中加载。当然,这对性能有相当负面的影响...

这也给了我一个很好的机会来查看 EF 内存消耗,现在我看到当我读取一个包含 50MB blob 的对象时,内存增加了 150MB。我知道有一个“当前值”和“原始值”集合,但显然还有第三个副本。这是什么?

【问题讨论】:

根据您的模型的创建方式,您应该可以只拥有一个单一副本 【参考方案1】:

默认情况下,上下文应保留原始值和当前值的副本。

对于只读用途,您应该能够通过禁用更改跟踪将内存占用减少 50M。

第三个副本可能是 blob 的一些非托管副本,但请通过 procdump 确定。

【讨论】:

通过直接从数据库中读取字节数组,我已经设法减少到 50MB。现在没有时间学习如何获取和阅读 procdumps...

以上是关于加载实体时,Entity Framework 会生成多少个数据副本?的主要内容,如果未能解决你的问题,请参考以下文章

Entity Framework Core 2.0.1 急切加载所有嵌套的相关实体

Entity Framework Core 删除包含已读取实体的实体

C#,Winform绑定实体框架(Entity Framework)的实体,如何去掉或隐藏导航属性?

使用.Net Entity Framework 问题删除具有子关系的实体

Entity Framework 4.1 - 动态预加载

Entity Framework学习-实体框架中的code-first迁移