В .net 4.0 я наблюдаю некоторые необычные паттерны сбора мусора, которые я не могу объяснить, любой совет будет принят с благодарностью.
В различные моменты выполнения моей программы количество сборок G2 начинает увеличиваться, а время GC % доходит почти до 100%. Это продолжается в течение некоторого времени, прежде чем остановиться (пожалуйста, смотрите снимок экрана Performance Monitor ниже). В это время трассировка событий CLR GC ETW в PerfView показывает, что несколько длительных G2 коллекций запускаются одна за другой с причиной 'AllocSmall'.
Может ли кто-нибудь пролить свет на:
Низкий уровень памяти не является проблемой, поскольку события запуска GC не содержат этого кода причины (http://msdn.microsoft.com/en-us/library/ff356162.aspx). Мы также наблюдали похожие ситуации, когда коллекции G0 происходили одна за другой.
Edit: Было высказано предположение, что триггером может быть превышение некоторого порога. Учитывая, что все еще есть свободная память, я бы ожидал, что куча G2 расширится в этот момент, а не будет пытаться собрать GC.
Edit: Изображения, размещенные ниже, имеют гораздо большее разрешение, чем отображает StackOverflow - просто откройте ссылку на изображение прямо во вкладке браузера.