繁体   English   中英

LINQ Join的内存使用情况是多少?

[英]What's the memory usage of LINQ Join?

  1. 如果两个IEnumerable(s)在内存中,加入它们的内存使用量是多少? 假设选择所有列。 是左表的大小+右表的大小+连接表中的行数?

  2. 如果两个IEnumerable(s)是由文件流定义的,那么如果它们太大而不适合内存,Join会抛出内存不足吗? 或者它会加载到内存不足并多次运行扫描(类似于数据库连接)?

Enumerable.JoinIterator查看Reflector,似乎整个inner (第二个)序列被加载到内存中(进入Lookup ),但是outer (第一个)序列然后被流式传输(即不是全部加载到内存中)。

如果inner序列太大而无法适应内存,似乎没有任何巧妙的事情发生。

Jon Skeets似乎同意第一点

在涉及输入序列的使用方式时,真正的Join运算符使用与Except和Intersect相同的行为:

...

  • 当第一次在结果序列上调用MoveNext时,它会立即消耗整个内部序列,并对其进行缓冲。

  • 外部序列是流式的 - 它一次只能读取一个元素。 当结果序列开始产生外部第二个元素的结果时,它就忘记了第一个元素。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM