使用Entity Framework时内存泄漏

我有一个使用EF的非常简单的应用程序。 但是当它运行一周时,内存使用率很差(一开始只有80MB,一周后只有700MB)。 当我使用dotMemory来分析我的应用程序时。 我发现Heap第2代的记忆一直在增加。

只运行40分钟

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

在此处输入图像描述

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

protected CarbonBrushMonitorEntities _entities = new MYEntities(); public void Add(HistoryData data) { _entities.HistoryDatas.Add(data); _entities.SaveChanges(); } 

_entities只在开始时间_entities一次,然后一直使用。

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

我谷歌很长一段时间,并尝试一些方法,如:

 _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(); } } 

EF上下文实际上是您的工作单元,一旦您不再需要它就应该被处理掉。