從我可以告訴分析sql時,它執行sql語句以檢索組的所有用戶,當它調用group.Users.Remove(user)
時。用戶是該組的虛擬集合,首先使用Entity Framework 6代碼。從虛擬集合中刪除/添加內存使用
var usersToRemove = Context.users.Where(u=>someListOfIds.Contains(u.Id)); //might only be a few users
foreach(var group in Context.groups)
{
foreach(var user in usersToRemove.Where(u=>u.groupId == group.Id)){
group.Users.Remove(user);//group.Users might have millions of users, do all users get pulled back into memory at this point?
}
}
我的問題是,用戶從集合在這裏group.Users.Remove(user)
拆卸和項目時加載到內存中的所有組?
您聲明'Context.groups.where ...'產生一個'IQueryable',當您開始循環時將會解決此外,除非您處理數百萬用戶,否則解決整個查詢不會讓你陷入內存問題(並且會比在循環集合時解析每個問題稍快)。 –
這是當前正在運行的異步作業。速度並不像內存約束那麼重要。將有大量的用戶,數百萬,這絕對是一個問題。你是說,只要你開始迭代組,所有的組都加載到內存中? –
修改了評論是做所有用戶都拉回到內存 - 可能困惑了一些人 –