Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 实体框架-从以前加载的实体中释放内存_Sql Server_Wpf_Entity Framework - Fatal编程技术网

Sql server 实体框架-从以前加载的实体中释放内存

Sql server 实体框架-从以前加载的实体中释放内存,sql-server,wpf,entity-framework,Sql Server,Wpf,Entity Framework,我正在寻找一种非常快速的方法来释放(分离)部分或完整的对象集,而不必删除其他类型的对象集实体 在我们的场景中,我们将许多对象集与主对象上下文一起使用。 有些表将来会有大量的数据,我们不想在内存中完全加载这些数据。只有上一年的数据才会加载起始筛选器,如果用户需要,他可以将筛选器更改为其他内容。过滤部分工作起来很简单,但是如果过滤器只加载以前尚未加载的实体,那么objectcontext会将旧实体保留在内存中。在速度非常快的计算机上,分离1-2000个实体可能需要4-5秒。即使对我来说,这也是不可接

我正在寻找一种非常快速的方法来释放(分离)部分或完整的对象集,而不必删除其他类型的对象集实体

在我们的场景中,我们将许多对象集与主对象上下文一起使用。
有些表将来会有大量的数据,我们不想在内存中完全加载这些数据。只有上一年的数据才会加载起始筛选器,如果用户需要,他可以将筛选器更改为其他内容。过滤部分工作起来很简单,但是如果过滤器只加载以前尚未加载的实体,那么objectcontext会将旧实体保留在内存中。在速度非常快的计算机上,分离1-2000个实体可能需要4-5秒。即使对我来说,这也是不可接受的,尤其是只需更改一次过滤器,这个数字就可以并且将超过40000个。

如果您使用的是实体框架,这应该不会是一个问题

EF被设计为具有短期对象上下文。为每个操作创建一个上下文,并在操作完成后销毁它。让对象上下文长时间处于活动状态是个坏主意,尽管桌面应用程序不如web应用程序那么糟糕

在很长一段时间内保持一个上下文是没有什么好处的


EF没有从对象图中删除对象的功能,因为它的设计目的是在您完成操作时破坏上下文。销毁上下文是释放内存的理想方式。

+1。基本上是“停止对抗实体框架”。整个“主objectcontext”已经是一个严重的错误。如果你在每次加载操作中使用不同的上下文,当你有两个连接的表时,你如何应对以下问题:equal方法会说,另一个实体列表与第一个列表中比较的实体不同;相同的实体将被加载多次。例:Place table与Country table有连接。当Place table加载时,它也会为每个Place项加载一个国家/地区,当您为组合框可选列表或其他原因加载整个国家/地区表时,您会再次加载完整列表。@JózsefMikla-我不明白您在说什么。EF负责“比较”数据,您不必担心。在您的场景中,如果您不自行处理,同一个表数据可以并且将被加载多次。某些表的同一行在系统中具有不同的引用,因此equal总是说,这些行不相同!如果你仍然不知道我在说什么,那你就根本没有经验,对不起。。