Народ - у меня есть задача А, которую я выполняю последовательно ~ 100 раз.Каждая задача A имеет много задач B, которые обрабатываются параллельно.B хранит данные, которые необходимы после завершения всех A.Таким образом, объем памяти программы увеличивается со временем.Это «долгосрочные» задачи.
Я обнаружил, что A тратит много времени на выполнение каждого последующего A. Я реализовал сборку мусора на сервере, и произошло значительное улучшение - время выполнения A было сокращено вдвое!Тем не менее, время А заканчивало расти с каждым последующим А - линейно.Таким образом, к 10-му А улучшения в Сборке мусора на сервере не имели значения - полные 100 А никогда не завершатся в разумные сроки, и мне нужно будет остановить процесс.
Моя гипотеза состоит в том, что растущий объем памятизаставляя GC выполнять больше работы с течением времени, замедляя все.
- Есть ли у вас какие-либо другие гипотезы, которые я могу проверить?
- Если моя гипотеза заслуживает изучения, какие решения я могу найти?Должен ли я стать более практичным с сборщиком мусора?Может быть, я должен сбросить данные в памяти на диск и высосать их, когда мне это нужно?
EDIT
Я забыл упомянуть, что каждый B вызывает GC.Collect иGC.WaitForPendingFinalizers, потому что я автоматизирую COM, и это единственный способ обеспечить запуск процесса COM-сервера.