Как измерить общие требования к памяти для программы на Python - PullRequest
2 голосов
/ 17 сентября 2009

У меня есть приложение для финансового ценообразования, написанное на Python 2.4.4, которое работает как плагин для Excel. Excel имеет ограничение памяти 1 ГБ для всех надстроек, поэтому, если какой-либо процесс надстройки попытается выделить более 1 ГБ, это приведет к сбою Excel.

Недавно я внес в программу изменения, которые могли изменить общие требования к памяти программы. Я хотел бы разобраться, изменилось ли что-нибудь существенным образом, и если нет, то я могу заверить свое руководство в том, что нет вероятности отказа из-за увеличения использования памяти.

Кстати, из командной строки можно запустить ту же функцию, которая работает в Excel:

По сути, я могу предоставить все аргументы, которые будут сгенерированы из Excel из обычной командной строки. Это означает, что если у меня есть метод для определения требований к памяти процесса самостоятельно, я могу с уверенностью заключить, что он будет использовать аналогичное количество при запуске из Excel.

Мне не интересны детали, которые может дать профилировщик памяти: мне не нужно знать, сколько памяти пытается выделить каждая функция. Что мне нужно знать, так это наименьший объем памяти, который потребуется программе для запуска, и я должен гарантировать, что если программа будет запущена в пределах 1 ГБ, она будет работать нормально.

Есть предложения, как мне это сделать?

Платформа - Windows XP 32bit, python 2.4.4

Ответы [ 2 ]

2 голосов
/ 17 сентября 2009

Я не верю, что XP отслеживает пиковые требования к памяти процесса (как, например, Linux в / proc / pid / status). Вы можете использовать сторонние утилиты, такие как , эту и настроить ее на «опрос» процесса очень часто, чтобы получить хороший шанс получить правильный пик.

Лучший подход, хотя он и не отвечает на ваш заглавный вопрос, состоит в том, чтобы попытаться запустить процесс под объектом задания с SetInformationJobObject с JOBOBJECT_EXTENDED_LIMIT_INFORMATION структура, имеющая подходящую ProcessMemoryLimit (например, макс. 1 ГБ виртуальной памяти) и правый флаг в JOBOBJECT_BASIC_LIMIT_INFORMATION для активации этого ограничения. Таким образом, если процесс работает правильно, вы ЗНАЕТЕ, что он никогда не использовал более 1 ГБ виртуальной памяти - в противном случае он завершится с ошибкой нехватки памяти.

Этот программный подход также позволяет измерять пиковые значения, но он достаточно сложен по сравнению с использованием уже упакованных инструментов, и я не думаю, что его можно рекомендовать для этой цели. Я не знаю упакованных инструментов, которые позволяют вам использовать объекты заданий, чтобы специально ограничивать ресурсы, доступные процессам (хотя я не удивлюсь, узнав, что некоторые из них доступны, будь то свободно или коммерчески, я никогда не сталкивался с одним из них). сам).

1 голос
/ 17 сентября 2009

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

Edit: Для чего-то более сложного взгляните на этот вопрос / ответ Как получить использование памяти под Windows в C ++

Редактировать: еще один вариант. Получите Process Explorer . Это в основном диспетчер задач на стероидах. Он запишет пиковое использование процесса для вас. (это бесплатно, поэтому вам не нужно беспокоиться о стоимости)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...