我有一个通用的存储库,我曾经在应用程序的开头注入一个Job
类。此作业类打算在循环中永久运行,因此存储库使用的上下文只创建一次。问题是几天之后应用程序消耗了1gb的内存(在执行的开始时消耗了40mb)。
之后,我在Dispose
中实现了DBContext
类的Repository
,并开始在每个循环中实例化它。问题解决了,但我失去了DIP原则。这是新代码:
public class Job
{
do{
//some code
using (var repository = new Repository<User>())
{
repository.Save(User);
}
}while(true);
}
存储库:
public void Save(T entity)
{
DbSet.Add(entity);
_context.SaveChanges();
}
private IDbSet<TEntity> DbSet
{
get { return _context.CreateSet<TEntity>(); }
}
是否有一些解决方法或提示使上下文不消耗此内存,只实例化一次?或者我必须在这种情况下丢失IoC模式吗?
感谢。