2012-12-25 54 views
-1

我正在寻找一种非常快速的方式来释放(分离)部分或可能是完整的对象集,而不会丢弃其他类型的对象集实体。实体框架 - 从以前加载的实体释放内存

在我们的场景中,我们使用了很多带有主要objectcontext的对象集。 一些表格将来会有非常大量的数据,我们不想在内存中完全加载。只有最后一年的数据将被加载启动过滤器,并且如果用户希望他可以将过滤器更改为其他内容。过滤部分的工作很简单,但如果过滤器仅加载之前尚未加载的实体,则旧实体将通过objectcontext保存在内存中。在非常快速的计算机上卸下1-2000个实体可能需要4-5秒。即使对我来说这也是不可接受的,特别是在只有一次过滤器更改的情况下,该数字可以并将会超过40000。

回答

2

如果您正在使用实体框架,那么这应该不会成为问题。

EF被设计为具有短暂的对象上下文。您为每个操作创建一个上下文,并在操作完成后将其销毁。保持对象上下文长时间存活是一个坏主意,尽管不像桌面应用程序那样糟糕。

通过长时间保持上下文很少有收获。

EF无法从对象图中移除对象,因为它旨在在您完成操作时破坏上下文。销毁上下文是释放内存的有效方式。

+0

+1。基本上“停止战斗实体框架”。整个“主要目标文字”已经是一个严重的错误。 – TomTom

+0

如果你为每个加载操作使用不同的上下文,当你有两个连接的表时,你如何反击以下问题: –

+0

等同的方法会说,实体的其他列表各自不同于实体从第一个列表中;相同的实体将被加载多次。例如:位置表与国家表有连接。当Place表格加载时,它也会为每个地点项目加载1个国家,当你加载整个国家/地区表格作为组合框选择列表或其他原因时,你会得到一个完整的列表再次加载。 –