实体框架5内存泄漏

时间:2014-02-13 22:35:35

标签: entity-framework

该应用程序是一个Windows服务,它正在检索我的实体的通用列表,然后根据返回的数据,我正在运行其他任务。该数据是只读的。不需要更新后端存储(Oracle 11g)中的数据。

为什么我相信我有内存泄漏? 尽管通过using语句处理上下文,但GC似乎并没有收获这些对象。在分析应用程序时,我注意到堆内存在应用程序的整个生命周期中逐渐增加。我还注意到不止一些GEN 2集合,这当然意味着对象在被收集之前已经存在了相当长的一段时间。 当我只返回手动生成的对象集合时,不会发生这种情况。在那种情况下,我看到很少有GEN 2集合(好),堆内存不会逐渐增加。

我正在运行Entity Framework 5.0 / C#4.5。我正在访问Oracle数据库。我正在使用数据库第一种方法。

除了立即处理上下文外,我还能做些什么来确保GC收集上下文?

public IEnumerable<EventServer> GetRegionalEventServers()
    {
        IEnumerable<EventServer> eventServers = null;
        using (AssetEntities context = new AssetEntities())
        {
            context.Configuration.AutoDetectChangesEnabled = false;
            context.Configuration.LazyLoadingEnabled = false;
            context.Configuration.ProxyCreationEnabled = false;
            try
            {
                eventServers = from p in context.EVENTSERVERS
                               select new EventServer
                               {
                                   ServerName = p.SERVER_NAME,
                                   Domain = p.DOMAIN,
                                   ServerLocation = p.SERVER_LOCATION
                               };

                return eventServers;
            }
            finally
            {
                eventServers = null;
            }
        }                                           
    }

0 个答案:

没有答案