我们有一个具有二进制列的数据库表。每行存储文件的文件内容。除非必要,否则我们希望避免将文件内容(每个大小为10-20Mb)加载到应用服务器的内存中。
在以下查询中,文件内容是否会加载到应用服务器的内存中?如果是,在哪个函数调用期间?
ajaxPromise
答案 0 :(得分:0)
返回IEnumerable<TSource>
或IQueriable<TSource>
的Linq方法被实现为延迟执行。
执行不同时,仅当您调用ToList()
/ ToArray()
(或其中一个不返回Sum()
/ Max()
/ {{1}之类的集合的linq扩展方法时实际上将执行并将检索数据
在您的第一个查询中,在您尝试检索特定项目或致电FirstOrDefault()
之前,OrderBy()
尚未执行。但是,即使这是延迟执行的,当你请求第一个项目时,这一个将不得不使用整个集合(而ToList()
例如将继续推迟整个集合 - see this for更多细节)
在第二个查询中,在该行之后,还没有任何内容可以执行。
你可以从昨天开始阅读关于linq和延迟执行的MSDN blog和this question,这也是关于linq和deferred的问题