我在.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吗?
答案 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离开后,您的上下文将自动关闭并释放。