高内存使用情况可能是由于以下几个原因引起的:
ToList()
或者AsNoTracking()
方法来及时释放资源。var result = _dbContext.Users.ToList();
或者
var result = _dbContext.Users.AsNoTracking().ToList();
Ignore
来忽略循环引用的导航属性。protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity().Ignore(u => u.OtherUsers);
}
Include
方法加载了大量不必要的关联数据,就会导致内存占用过高。可以通过显式加载关联数据或者延迟加载的方式来减少内存占用。var user = _dbContext.Users.Include(u => u.Orders).FirstOrDefault();
或者
var user = _dbContext.Users.FirstOrDefault();
_dbContext.Entry(user).Collection(u => u.Orders).Load();
AddRange()
方法来减少内存占用。var users = _dbContext.Users.Skip(100).Take(100).ToList();
或者
var users = new List();
for (int i = 0; i < 10000; i++)
{
users.Add(new User { Name = "User" + i });
}
_dbContext.Users.AddRange(users);
通过以上方法,可以有效地减少AspNet Core Web API使用EF Core时的高内存使用情况。