根据它提到的文档) (soql for循环)使用对queryMore的调用检索所有的queryMore,而(list for循环)则检索许多对象记录。建议使用(soql for循环) over (list for循环)来避免堆大小限制错误。
总堆大小限制:6 M.B同步和12 M.B异步。
在下面的情况中,假设每个记录占用2 K.B,所以50,000将使用50,000*2=100000 K.B (conList中的大约100 M.B ),这将导致堆大小限制错误,因为同步允许的限制为6 M.B。
list<contact> conList=new list<contact>();
conList=[Select id,phone from contact];为了避免这种情况,我们应该使用"SOQL for循环“作为con变量,如下所示,每次将有一个记录,即2k.B的数据,从而防止堆大小限制错误。
for (List<Contact> con: [SELECT id, name FROM contact]){
}问题--这意味着"SOQL for循环“作为con变量,一次将有1条记录,即每次2k.B的数据。
发布于 2022-01-26 08:35:40
主要的区别是,如果您这样做,就不能在for循环之外使用检索到的记录。当您将记录存储在列表中时,您可以在for循环中使用该列表来操作它,但是您也可以在以后的其他操作中使用它。举个例子:
List<Contact> conList = [SELECT Id, Name FROM Contact LIMIT 100];
for(Contact c:conList){
c.Title = Mr/Mrs;
}
update conList;//I am able to use the same list in the update call. https://stackoverflow.com/questions/70811548
复制相似问题