我一直在看一个当然笔者提到这里,如果你有一些IQueryable的,说:迭代的IQueryable用foreach与调用ToList(),然后做的forEach - 性能
var someQuery = dbContext.Table.Where(x => x.Name == "Mark");
,然后尝试使用forEach
迭代someQuery
的结果,它会保持数据库连接处于打开状态,直到整个forEach
结束,并且很多初学者开发者犯了这个错误,并且在forEach
中执行了大量逻辑。相反,她建议只在前台调用toList()
,然后在内存中收集forEach
。
虽然我找不到任何参考,但实体框架会保持数据库处于打开状态,直到forEach
循环停止。我如何评估这是否真正的性能?
我已经[发现了困难的方式](http://stackoverflow.com/a/22530381/261050) – Maarten
是的,它会保持连接打开,直到它遇到.toList() –
连接保持打开,直到枚举'IQueryable'完成。这会发生在'foreach'循环结尾或调用'.ToList()'时。然而,不清楚的是,以这种或那种方式进行这种表演会有性能损失。确保数据库连接长时间保持打开状态肯定存在问题 - 您通常希望尽快释放连接。 – Enigmativity