Должен ли процесс всегда использовать один и тот же объем памяти, если выполняется одинаково? - PullRequest
0 голосов
/ 21 января 2011

Привет, ребята, и спасибо за ваше время заранее.

В настоящее время я расширяю нашу тестовую среду C # для мониторинга памяти, используемой нашим приложением. Предполагается, что ошибка потенциально возникает, если потребление памяти значительно возрастает при новой сборке, поскольку ресурсы всегда ограничены.

Я использую System.Diagnostics.Process.GetProcessByName, а затем проверяю значение PrivateMemorySize64.

Во время разработки нового теста, когда использовалась одна и та же сборка приложения для согласованности, я видел, что он потребляет разные объемы памяти, несмотря на то, что якобы выполняется точно такой же код.

Итак, мой вопрос: если после запуска приложения, его полной загрузки и в этом случае он находится в состоянии ожидания, то есть в идентичном состоянии от запуска к запуску, могу ли я ожидать, что использованные частные байты будут идентичны от запуска к запуску?

Мне нужно уточнить, что я могу ожидать, что использование памяти будет постоянным, поскольку любая степень отклонения начинает снижать эффективность теста, поскольку необходимо будет ввести степень допуска, чего я хотел бы избежать.

Итак ...

1) Должно ли использование памяти быть на 100% согласованным, если приложение работает согласованно? Это было мое ожидание.

или

2) Существуют ли какие-либо различия в использовании частного байта, возвращаемого окнами, или в памяти, которую оно выделяет по запросу приложения?

В настоящее время, если ответ о том, что память потребляется, должен быть согласованным, как я ожидал, проблема заключается в том, что наше приложение запрашивает другой объем памяти.

Большое спасибо

H

Ответы [ 2 ]

0 голосов
/ 21 января 2011

Если программа детерминированная (как и все встроенные программы), то да. В среде ОС вы вряд ли получите те же цифры из-за фрагментации памяти и множества других факторов.

Обновление:

Только что заметил это приложение на C #, так что нет, но цифры должны быть относительно близки (+/- 10% или меньше).

0 голосов
/ 21 января 2011

Практически все в .NET использует сборщик мусора во время выполнения, и когда он точно запустится и сколько памяти освободит, зависит от множества факторов, многие из которых не в ваших руках. Например, когда другой программе требуется много памяти, и у вас есть много доступной для сбора памяти, GC может решить освободить ее сейчас, тогда как когда ваша программа работает только одна, эвристика GC может решить, что она более эффективна чтобы накопленная память накапливалась немного дольше. Итак, короткий ответ: нет, использование памяти не будет на 100% согласованным.

OTOH, если у вас действительно большие различия между прогонами (скажем, несколько мегабайт на одном прогоне против половины гигабайта на другом), у вас должно появиться подозрение.

...