Есть ли способ узнать, сколько памяти использует ElementTree DOM? - PullRequest
2 голосов
/ 28 января 2012

Предположим, вы делаете следующее:

dom = ElementTree()
dom.parse(some_file_path)

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

Не думаю, что смогу вывести его из размера исходного XML-файла. У меня есть файл размером 500 килобайт, который, кажется, добавляет около 5 МБ к использованию памяти моим процессом python после его загрузки, как в примере выше.

Я просмотрел API ElementTree и не увидел ни одного API, предоставляющего эту информацию. Кто-нибудь знает способ узнать, сколько памяти использует экземпляр ElementTree после анализа / загрузки XML-файла?

1 Ответ

5 голосов
/ 28 января 2012

По сути, вы хотите найти потребление памяти для определенного объекта Python. Это и есть. Здесь это ElementTree объект, но это может быть что угодно.

Чтобы сократить погоню, насколько я знаю Нет простого способа узнать объем памяти объекта python . Одна из проблем, с которой вы можете столкнуться, заключается в том, что объекты Python, такие как списки и диктовки, могут иметь ссылки на другие объекты Python (в этом случае, каким будет ваш размер? Размер, содержащий размер каждого объекта или нет?). Существует несколько указателей на служебные и внутренние структуры, связанные с типами объектов и сборкой мусора. Наконец, некоторые объекты Python имеют неочевидное поведение. Например, списки резервируют место для большего количества объектов, чем они имеют, большую часть времени; Диктовки еще более сложны, поскольку они могут работать по-разному (они имеют различную реализацию для небольшого количества ключей, а иногда они перераспределяют записи).

  • Существует большой кусок кода , чтобы попытаться наилучшим образом приблизить размер объекта python в памяти. Также есть более простые приближения . Но они всегда будут приблизительными.
  • Вы также можете проверить некоторое старое описание PyObject (внутренняя структура C, которая представляет практически все объекты Python).
  • также PySizer, «профилировщик памяти для Python», найденный по адресу http://pysizer.8325.org/. Однако страница, похоже, указывает, что проект некоторое время не обновлялся, и ссылается на ...
  • Вы можете попробовать Heapy, «поддержку [отладки] и оптимизацию проблем с памятью в программах Python», которые можно найти по адресу http://guppy -pe.sourceforge.net / # Heapy .
  • objgraph выглядит интересно: http://mg.pov.lt/objgraph/
...