加载实体时,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)的实体,如何去掉或隐藏导航属性?