У нас есть различные тесты, которые отслеживают использование памяти нашим приложением (или подкомпонентами) в различных сценариях, чтобы проверить регрессию. Проблема в том, что наши измерения (с использованием Process.Refresh(); Process.PrivateMemorySize64
) сильно колеблются в разных прогонах.
Сейчас мы делаем опрос через фоновый поток каждые X
миллисекунды. Мы сравниваем достигнутое максимальное значение с контрольным значением и соответственно проходим/не проходим.
Интересно, что сокращение времени между опросами значительно снижает максимальное записываемое значение памяти. В одном примере чтение памяти каждые 100 мс дает максимум 360 МБ, каждые 10 мс — 147 МБ, а каждая 1 мс — 35 мс. Предположительно, увеличение количества наблюдений каким-то образом делает поведение сборщика мусора более агрессивным.
Я полагаю, что основная проблема заключается в том, что то, что мы пытаемся измерить, «максимальное использование памяти», не очень хорошо определено. Если имеется много доступной памяти, сборщик мусора может не удосужиться включиться, поэтому использование памяти будет выше.
Существует ли стандартный способ измерения использования памяти в сети с точками для защиты от снижения производительности?