加载到应用服务器的内存中

加载到应用服务器的内存中

我们有一个具有二进制列的数据库表。每行存储文件的文件内容。除非必要,否则我们希望避免将文件内容(每个文件的大小可以为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()(或不返回诸如Sum() / Max() / FirstOrDefault()等的集合的linq扩展方法之一)时,才会实际执行并执行检索数据

在您的第一个查询中,直到尝试检索特定项目或调用OrderBy()为止,ToList()尚未执行。但是,即使推迟执行该操作,在您请求第一个项目的那一刻,它也必须消耗整个集合(例如,Select()将继续推迟整个集合的使用-see this有关更多详细信息)

在第二行查询中,在该行之后,什么都不会执行。

您可以阅读有关linq和延迟执行的MSDN blog信息,以及昨天的this question,还询问linq和延迟什么时间的问题

关于c# - 何时将数据加载到应用服务器的内存中?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39031405/

10-10 07:56