我们有一个具有二进制列的数据库表。每行存储文件的文件内容。除非必要,否则我们希望避免将文件内容(每个文件的大小可以为10-20Mb)加载到应用服务器的内存中。
在以下查询中,文件内容会被加载到应用服务器的内存中吗?如果是,在哪个函数调用期间?
// Query 1
dataContext.DataFiles.OrderBy(w => w.atimestamp).ToList();
// Query 2
var filesizes = from DataFiles in dataContext.DataFiles
select DataFiles.FileContent.Length;
返回IEnumerable<TSource>
或IQueriable<TSource>
实现为延迟执行的Linq方法。正在执行的不同,只有当你调用ToList()
/ ToArray()
(或的LINQ扩展方法不返回集合像一个Sum()
/ Max()
/FirstOrDefault()
等)实际上被执行,将检索数据
在您的第一个查询中,OrderBy()
直到您尝试检索特定项目或调用时,才执行ToList()
。但是,即使此操作被推迟执行,在您请求第一个项目的那一刻,它也必须消耗整个集合(Select()
例如,对于整个集合,该设置将继续被推迟-有关更多详细信息,请参见此内容)
在第二行查询中,在该行之后,什么都不会执行。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句