Чтобы ответить на ваш первый вопрос - в этом случае проблема с большими входами состоит в том, что вся последовательность должна быть обработана, прежде чем такие функции, как fold
или groupBy
, могут дать результат.Есть несколько вещей, которые вы можете сделать:
Использовать такие функции, как Seq.scan
, которые агрегируют значения точно так же, как fold
, но выдают текущее состояние после добавления каждого элемента - результат также является последовательностью иВы можете использовать его laziliy (например, и получить более точный результат).
При написании функций, которые возвращают seq<'a>
, вы должны спроектировать их так, чтобы получить следующий элемент изпоследовательность потребляет только некоторое предсказуемое количество элементов ввода (но не всю последовательность ввода).Это невозможно, например, для groupBy
, но вы можете написать похожую на группировку конструкцию, которая группирует только смежные элементы одной и той же группы.
Чтобы ответить на второй вопрос - вы не должныВообще беспокоиться о сборщике мусора слишком сильно.Принудительная сборка мусора в конце функции, вероятно, принесет больше вреда, чем просто полагаться на работу ГХ.