c# - 数据何时加载到应用服务器的内存中?

标签 c# performance linq binary

我们有一个包含二进制列的数据库表。每行存储一个文件的文件内容。除非必要,否则我们希望避免将文件内容(每个文件的大小可能为 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> 的 Linq 方法或 IQueriable<TSource>被实现为延迟执行。 差异执行,只有当你调用ToList()/ToArray() (或不返回集合的 linq 扩展方法之一,如 Sum()/Max()/FirstOrDefault() 等)将实际执行并检索数据

在您的第一个查询中,OrderBy()在您尝试检索特定项目或调用 ToList() 之前尚未执行.但是,即使这是延迟执行的,它也必须在您请求第一项时消耗整个集合(例如 Select() 将继续延迟整个集合 - see this 了解更多详细信息)

在你的第二个查询中,在该行之后,还没有执行任何内容。

你可以阅读这个 MSDN blog关于 linq 和延迟执行以及 this question从昨天开始还问了linq和deferred什么时候的问题

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

相关文章:

c# - 如何从匿名表达式中获取值?

c# - Razor 模板中的可空日期时间错误

c# - Crystal 报表怪异错误(未知查询引擎错误)

javascript - 无需太多 jQuery 请求即可获取传递的元素属性和属性

mysql - 在多个 varchar 列上优化 LEFT JOINS ORDER BY

c# - 如何更快/更智能地读取文本文件?

c# - 在 LINQ C# 中修剪字符串

c# - 如何以编程方式加载 aspx 文件?

java - 消除重复条目的最有效方法

c# - Linq 组合字段