实体框架上的内存泄漏

本文关键字:内存 泄漏 框架 实体 | 更新日期: 2023-09-27 18:16:12

我为应用程序周期中用作查找的记录创建了几个静态列表。

然而,当在内存分析器上检查并看到对象上下文正在被处理时,GC无法收集内存,因为它保留了引用。

下面是代码片段(我认为使用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();
                }
            }

请让我知道是什么错误的代码,导致内存泄漏

实体框架上的内存泄漏

您必须显式地分离实体。在以前版本的EF中,您可以调用context。分离-但我相信这是EF 6的标准方法。

private static void LoadStates()
        {
            using (LeadContextUoW leadContext = new LeadContextUoW())
            {
                _states = leadContext.States.AllWithNoTracking.ToList();
                foreach(var state in _states)
                    leadContext.Entry(state).State = System.Data.Entity.EntityState.Detached;
            }
        }