Я изначально разместил это как комментарий, но я думаю, что это дает лучший ответ, так что ...
а) если вы уверены, что обнаружили проблему с платформой .NET, возможно, вы делаете что-то не так. Это не невозможно, просто маловероятно.
б) что GC.Collect () не собирается делать то, что, как вы думаете, будет.
Я думаю, вам нужно проверить, как работает GC.Collect ().
Примечания
Используйте этот метод, чтобы попытаться восстановить всю память, которая недоступна.
Все объекты, независимо от того, сколько времени они были в памяти, рассматриваются для сбора; однако объекты, на которые есть ссылки в управляемом коде, не собираются. Используйте этот метод, чтобы заставить систему попытаться восстановить максимальный объем доступной памяти.
Для начала, вы не показываете нам, где вы избавляетесь от той памяти, что ListCollectionView(stuff)
. Вы просто распределяете новое и распределяете новое, но вы никогда не избавляетесь от старого. Так что да, это будет течь как сумасшедший. Пока GC не запустится и не попытается собрать.
Если вы делаете то же самое, что демонстрируете здесь со списком строк, то, скорее всего, будет делать то же самое. Но из-за того, что вы показали, я ожидаю, что это протечет.