Имаме различни тестове, които наблюдават използването на паметта на нашето приложение (или подкомпоненти) при различни сценарии, за да проверим за регресии. Проблемът е, че нашите измервания (използвайки Process.Refresh(); Process.PrivateMemorySize64
) се колебаят силно при различни серии.
Това, което правим в момента, е анкетиране чрез фонова нишка на всеки X
милисекунди. Сравняваме достигнатата максимална стойност с бенчмарк и съответно преминаваме/не успяваме.
Интересното е, че намаляването на времето между анкетите значително намалява максималната записана стойност на паметта. В един пример четенето на паметта на всеки 100 ms дава максимум 360 MB, на всеки 10 ms дава 147 MB и на всеки 1 ms дава 35 ms. Вероятно увеличеният брой наблюдения по някакъв начин прави поведението на GC по-агресивно.
Предполагам, че основният проблем е, че това, което се опитваме да измерим, "максималното използване на паметта", не е особено добре дефинирано. Ако има достатъчно налична памет, GC може да не си направи труда да започне, така че използването на паметта ще изглежда по-високо.
Има ли стандартен начин за измерване на използването на паметта под dot net, за да се предпази от влошаване на производителността?