如何通过实体框架减少内存使用量

时间:2011-04-09 19:26:28

标签: asp.net entity-framework

我在.NET4和实体框架上创建了一个CMS。此CMS现在开始在具有共享内存的服务器上使用。

应用程序池内存有限,因此当我的应用程序达到内存限制时,应用程序池重置。跟踪我的应用后,我意识到EF使用大部分内存。有没有办法减少EF或任何调整的内存使用?

我对EF的示例使用:

using BICT.Data;
//
public static List<Data.Log> GetList()
{
    using(CMSEntities cms = new CMSEntities())
    {
       return cms.Log.ToList<Data.Log>();
    }
}
我使用错误的方式使用EF吗?

1 个答案:

答案 0 :(得分:2)

假设CMSEntities是您的dbContext,那么您正在使用它,因为它实现了IDisposable接口。

我建议的一件事是返回IQueryable而不是List,因为你可以灵活地管理Linq查询,然后实际访问数据库。 (Lazy Loading)。

如果你想要所有的项目,你可以调用.ToList(),这样你仍然可以使用该选项。


修改

例如,假设我的数据库中有一个User表,我创建了一个用于访问数据的包装类。

namespace Data.Repositories
{
    public class UserRepository : IDisposable
    {
        ColegioDBV2Entities db = new ColegioDBV2Entities();

        public IQueryable<User> FindAllUsers()
        {
            return db.Users;
        }    

        public void Dispose()
        {
            db.Dispose();
        }
    }
}

当我想访问数据时,我会通过此存储库类执行此操作:

using (UserRepository repo = new UserRepository())
{
    var result = repo.FindAllUsers().Where(u => u.Username == txtUsername.Text && u.Password == txtPassword.Text);                    
}

使用block离开后,您的上下文将自动关闭并释放。