我正在尝试向 Seq 模块添加一些额外的聚合函数。我正在查看此处列出的一些功能的实现:
https://github.com/fsharp/fsharp/blob/master/src/fsharp/FSharp.Core/seq.fs
其中一个免责声明是“此函数返回一个序列,该序列在迭代该序列后立即消化整个初始序列。因此,该函数不应与大型或无限序列一起使用。” 许多函数都是如此,例如 GroupBy。
第一个问题:是否有编写可以有效处理大序列的聚合函数的方法?我知道“大”是主观的;我只是在寻找编写此类函数的通用模式。
第二个问题:如何确保像 Dictionary(在聚合函数中定义的)这样的集合被有效地垃圾收集?我知道字典超出范围时应该被收集,但是有没有办法明确指出这一点?鉴于字典的作用域保留在函数内,我不能调用 .Clear() 对吗?