Question

Cette question a déjà une réponse ici:

Comment feriez-vous pour trouver la quantité de mémoire utilisée par un objet?Je sais que c'est possible de savoir combien est utilisée par un bloc de code, mais pas par un objet instancié (à tout moment au cours de sa vie), qui est ce que je veux.

Était-ce utile?

La solution

Il n'y a pas de moyen facile de trouver la taille de la mémoire d'un objet python.Parmi les problèmes que vous pourriez constater que les objets Python - comme les listes et les dicts - peut avoir des références à d'autres objets python (dans ce cas, quelle serait la taille de votre être?La taille contenant la taille de chaque objet ou pas?).Il y a quelques conseils généraux et les structures internes liées à des types d'objet et de collecte des ordures.Enfin, certains objets python ont la non-évidence de comportements.Par exemple, des listes de réserve de l'espace pour les objets qu'ils ont, la plupart du temps;dicts sont encore plus complexes puisqu'ils peuvent fonctionner de différentes façons (ils ont une mise en œuvre différente pour le petit nombre de touches et, parfois, ils ont plus de répartir les entrées).

Il y a un gros morceau de code (et un mise à jour gros morceau de code) là-bas pour essayer de mieux approximative de la taille d'un objet python dans la mémoire.

Vous pouvez également vouloir vérifier certains ancienne description de PyObject (l'interne de la structure C qui représente pratiquement l'ensemble des objets python).

Autres conseils

Essayez ceci:

sys.getsizeof(object)

getsizeof() les appels de l'objet __sizeof__ méthode et ajoute un garbage collector généraux si l'objet est géré par le garbage collector.

Un appel récursif à la recette

Une autre approche consiste à utiliser des cornichons.Voir cette réponse pour une copie de cette question.

Je n'ai pas d'expérience personnelle avec l'un des suivants, mais une simple recherche pour "Python [mémoire] profiler" rendement:

  • PySizer, "un profileur de mémoire pour Python", à http://pysizer.8325.org/.Toutefois, la page semble indiquer que le projet n'a pas été mis à jour depuis un moment, et fait référence à...

  • Heapy, "le soutien[ing] de débogage et d'optimisation de mémoire, sur des questions liées Python programmes", à http://guppy-pe.sourceforge.net/#Heapy.

Espérons que cela aide.

Cela doit être utilisé avec précaution, car un remplacement sur les objets __sizeof__ pourrait être trompeuse.

À l'aide de la bregman.suite, quelques tests avec sys.getsizeof sortie d'une copie d'un tableau d'objet (données) dans une instance de l'objet comme étant plus grand que l'objet lui-même (mfcc).

>>> mfcc = MelFrequencyCepstrum(filepath, params)
>>> data = mfcc.X[:]
>>> sys.getsizeof(mfcc)
64
>>> sys.getsizeof(mfcc.X)
>>>80
>>> sys.getsizeof(data)
80
>>> mfcc
<bregman.features.MelFrequencyCepstrum object at 0x104ad3e90>

Pour les gros objets, vous pouvez utiliser un peu rudimentaire mais efficace méthode:de vérifier la quantité de mémoire de votre Python processus occupe dans le système, puis supprimez l'objet et de les comparer.

Cette méthode présente de nombreux inconvénients, mais il vous donnera une très estimation rapide pour des objets très gros.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top