Во-первых, спасибо, что знаете о вашем потреблении памяти Если бы только больше программистов были такими внимательными ...
Во-вторых, я бы не стал беспокоиться: возможно, пользователь хочет, чтобы ваше приложение работало как можно быстрее, и готов сжечь 8000 мегабайт памяти, чтобы получить результаты на 5% быстрее. Позволь им. :)
Но , искусственное ограничение объема памяти, занимаемой вашим приложением, может радикально увеличить время обработки, если вы заставите больше обращений к диску в процессе. Если кто-то работает в системе с ограниченным объемом памяти, он может уже иметь дисковый трафик для подкачки - если вы искусственно сбрасываете память до того, как закончите с ней, вы только вносите дополнительный вклад в дисковый ввод-вывод, входя в систему. способ обмена. Пусть ОС справится с этой ситуацией.
И наконец, шаблон доступа, который вы здесь написали (последовательный, построчный), является очень обычным, и, несомненно, разработчики .NET приложили огромные усилия для получения памяти использование от этого шаблона до минимума. Добавление объектов в ваши внутренние деревья по частям - хорошая идея, но очень немногие приложения могут извлечь из этого пользу. (Сортировка слиянием - это отличное приложение, которое значительно выигрывает от частичной обработки.)
В зависимости от того, что вы делаете со своим законченным списком объектов, вы не сможете улучшить работу со всем списком сразу. ИЛИ, вы могли бы извлечь большую выгоду из разрыва его. (Если Map Reduce хорошо описывает вашу проблему с обработкой данных, то, возможно, вам было бы полезно разбить вещи на части.)
В любом случае, я бы немного опасался использовать «память» в качестве эталона для принятия решения о том, когда следует разделить обработку: я бы предпочел использовать «1000 строк ввода» или «десять уровней вложенности» или « запускал станки в течение пяти минут "или что-то, что основано на вводе, а не вторичном эффекте потребляемой памяти.