Seq モジュールにいくつかの集計関数を追加しようとしています。ここにリストされている関数のいくつかの実装を見ていました。
https://github.com/fsharp/fsharp/blob/master/src/fsharp/FSharp.Core/seq.fs
免責事項の 1 つは、「この関数は、シーケンスが繰り返されるとすぐに最初のシーケンス全体を消化するシーケンスを返します。結果として、この関数は大規模または無限のシーケンスで使用しないでください。」これは、GroupBy などの多くの関数に当てはまります。
最初の質問: 大きなシーケンスを効率的に処理できる集約関数を作成する方法はありますか? 「大」が主観的であることはわかっています。そのような関数を書くための一般的なパターンを探しています。
2 番目の質問: Dictionary などのコレクション (集約関数内で定義されているもの) が効率的にガベージ コレクションされるようにするにはどうすればよいですか? 範囲外になったときに辞書を収集する必要があることは理解していますが、それを明示的に示す方法はありますか? 辞書が関数内にとどまるようにスコープされていることを考えると、そのどちらでも .Clear() を呼び出すことはできませんか?