Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/23.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
C# 实体框架是否占用了我的内存?_C#_.net_Entity - Fatal编程技术网

C# 实体框架是否占用了我的内存?

C# 实体框架是否占用了我的内存?,c#,.net,entity,C#,.net,Entity,我试图找出我正在编写的基本应用程序中内存使用过度的原因。我正在尝试创建一个包含25000个节点的动态MVC站点地图,并使用实体框架从数据库表中填充它(尽管这个细节可能并不重要) 我有以下代码: foreach(context.companys中的var c){} 在这一行之前有一个断点,webdev.webserver40.exe将消耗大约50mb的内存。之后大约250mb。我试着处理上下文,让上下文脱离范围;每次调用GC.Collect(),但我似乎无法恢复此内存 注意:我知道内存不一定要被释

我试图找出我正在编写的基本应用程序中内存使用过度的原因。我正在尝试创建一个包含25000个节点的动态MVC站点地图,并使用实体框架从数据库表中填充它(尽管这个细节可能并不重要)

我有以下代码:

foreach(context.companys中的var c){}

在这一行之前有一个断点,webdev.webserver40.exe将消耗大约50mb的内存。之后大约250mb。我试着处理上下文,让上下文脱离范围;每次调用GC.Collect(),但我似乎无法恢复此内存

注意:我知道内存不一定要被释放,而且通常不会立即释放,我只是想让我的大脑放心,这里没有内存泄漏


谢谢

为什么不启动一个商用内存分析器(都有免费试用版)这样一个,比较两个快照,看看你的内存到哪里去了


如果不查看代码,就很难判断是否存在内存泄漏。

为什么不启动一个商用内存分析器(都有免费试用版)这样,比较两个快照,看看内存到哪里去了


如果看不到您的代码,很难判断您是否存在内存泄漏。

我的代码几乎完全相同,但我的上下文是实体框架上下文,数据来自数据库。这似乎是一个“内存使用高峰”,而不是一个永久性的“泄漏”,因为进程的总体内存消耗最终会回到合理的正常水平。但这仍然不是一件好事

它似乎正在将整个列数据(在我的例子中包括一个大的二进制列数据)加载到内存中。数据保留到“范围”结束(例如内容超出范围)。在循环过程中,一些数据在垃圾收集中幸存下来,并被提升到下一代,这导致保留期更长(在我的例子中,内存在10分钟后释放)

我尝试了各种方法,但我认为这只是我们必须接受的行为

在我的特殊情况下,我使用二进制序列化在数据库中保存对象状态。我还没有解决这个问题,但是我减少内存使用峰值的解决方法是重构代码,这样我就不会使用二进制序列化,而是将原始数据保存到数据库表列中,并简单地为代码中的对象赋值。下一个修复级别是使用“延迟初始化”,然后是缓存等


在站点地图中,也许您可以“分段”视图并只加载节点的子集。

我有一个类似的情况,代码几乎完全相同,只是我的上下文是实体框架上下文,数据来自数据库。这似乎是一个“内存使用高峰”,而不是一个永久性的“泄漏”,因为进程的总体内存消耗最终会回到合理的正常水平。但这仍然不是一件好事

它似乎正在将整个列数据(在我的例子中包括一个大的二进制列数据)加载到内存中。数据保留到“范围”结束(例如内容超出范围)。在循环过程中,一些数据在垃圾收集中幸存下来,并被提升到下一代,这导致保留期更长(在我的例子中,内存在10分钟后释放)

我尝试了各种方法,但我认为这只是我们必须接受的行为

在我的特殊情况下,我使用二进制序列化在数据库中保存对象状态。我还没有解决这个问题,但是我减少内存使用峰值的解决方法是重构代码,这样我就不会使用二进制序列化,而是将原始数据保存到数据库表列中,并简单地为代码中的对象赋值。下一个修复级别是使用“延迟初始化”,然后是缓存等

在站点地图中,您可能可以“分段”视图并仅加载节点的子集