【发布时间】:2014-09-26 22:35:15
【问题描述】:
我为在应用程序周期中用作查找的记录创建了一些静态列表。
但是,当在内存分析器上检查并看到对象上下文正在被释放时,GC 无法收集内存,因为它保留在引用中。
下面是代码 sn-p(我认为使用 AsNoTracking 会破坏上下文和实体之间的关系,并且会导致上下文消失。)
private static List<State> _states;
public static List<State> States
{
get
{
if (_states == null)
LoadStates();
return _states;
}
}
private static void LoadStates()
{
using (LeadContextUoW leadContext = new LeadContextUoW())
{
_states = leadContext.States.AllWithNoTracking.ToList();
}
}
请让我知道导致内存泄漏的代码有什么问题。
【问题讨论】:
-
AllWithNoTracking 与 IQueryable 上的 AsNoTracking 扩展不同,不是标准的 EF 扩展。您是否有权访问自定义扩展的源代码以确保其正确实施?
-
正确实现。以下是定义: public IQueryable
AllWithNoTracking { get { return DbSet.AsNoTracking().AsQueryable(); } }
标签: c# entity-framework memory-leaks