gpt4 book ai didi

c# - 使用 Entity Framework 时发生内存泄漏

转载 作者:行者123 更新时间:2023-12-04 02:50:02 25 4
gpt4 key购买 nike

我有一个使用EF的非常简单的应用程序。但是当它运行一周时,内存使用情况非常糟糕(最初只有80MB,一个星期后只有700MB)。
当我使用dotMemory来分析我的应用程序时。我发现第2代堆的内存一直在增加。

我得到一个快照,最后发现ef dbcontext的保留字节最多。

我感到很困惑。我的申请非常简单。代码示例:

protected CarbonBrushMonitorEntities _entities = new MYEntities();
public void Add(HistoryData data)
{
_entities.HistoryDatas.Add(data);
_entities.SaveChanges();
}
_entities在开始时仅缩写一次,然后一直使用。

经常调用 Add函数,大约3次/秒

我在Google上搜索了很长时间,然后尝试一些方法,例如:
_entities.Configuration.ValidateOnSaveEnabled = false;
_entities.Configuration.AutoDetectChangesEnabled = false;
_entities.Configuration.LazyLoadingEnabled = false;

但是这些不起作用。

最佳答案

如果使用 Entity Framework ,则应在需要之前创建上下文尽快将其处置:

 using (var someContext = new SomeContext())
{
// your commands/queries
}

切勿将上下文保留在内存中或在不同的调用之间共享。

我通常要做的是向IoC容器注册上下文:
 DependencyFactory.RegisterType(typeof(SomeContext));

并使用上下文解析器(当然也已向IoC注册):
 using (var someContext = _contextResolver.ResolveContext())
{
// your commands/queries
}

解决方法如下:
 public class ContextResolver : IContextResolver
{
public ISomeContext ResolveContext()
{
return DependencyFactory.Resolve<SomeContext>();
}
}

EF上下文实际上是您的工作单元,一旦您不再需要它,就应该将其丢弃。

关于c# - 使用 Entity Framework 时发生内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30209528/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com