我有一个关于如何在 linq 查询中处理垃圾收集的问题。假设给了我一个要处理的请求列表。每个请求都会生成一组非常大的数据,但随后会应用一个过滤器来仅保留来自每个请求负载的关键数据。
//Input data
List<request> requests;
IEnumerable<filteredData> results = requests.Select(request => Process(request)).Select(data => Filter(data));
所以我知道查询被推迟到每个数据项,直到每个过滤的数据项被请求,所以这很好。但是那个中等记忆强度的部分会一直持续到可枚举完成吗?
我希望发生的是每个数据元素一旦通过过滤阶段就可以被垃圾收集,从而确保我有足够的内存来处理整个列表。是这种情况,还是中间可枚举保留所有内容直到整个查询结束?如果是这样,有没有一种 linq 方法来处理这个问题?
注意: Process() 函数会生成内存密集型数据……这就是我担心的