¿Qué le parece averiguar cuánta memoria está utilizando un objeto? Sé que es posible averiguar cuánto se usa por un bloque de código, pero no por un objeto instanciado (en cualquier momento de su vida), que es lo que quiero.Averiguar cuánta memoria está usando un objeto en Python
Respuesta
No hay una manera fácil de encontrar el tamaño de la memoria de un objeto python. Uno de los problemas que puede encontrar es que los objetos de Python, como las listas y los dictados, pueden tener referencias a otros objetos de Python (en este caso, ¿cuál sería su tamaño? ¿El tamaño que contiene el tamaño de cada objeto o no?). Existen algunos indicadores generales y estructuras internas relacionadas con los tipos de objetos y la recolección de basura. Finalmente, algunos objetos Python tienen comportamientos no obvios. Por ejemplo, enumera el espacio de reserva para más objetos de los que tienen, la mayoría de las veces; Los dicts son incluso más complicados ya que pueden operar de diferentes maneras (tienen una implementación diferente para un número pequeño de claves y, a veces, asignan más de las entradas).
Hay un big chunk of code (y un updated big chunk of code) para tratar de aproximar mejor el tamaño de un objeto python en la memoria. También hay algunos simpler approximations. Pero siempre serán aproximaciones.
También es posible que desee comprobar algunos old description about PyObject (la estructura C interna que representa prácticamente todos los objetos python).
@culix: Parece que de nuevo ahora se utiliza en el [Pympler] (http://pythonhosted.org/Pympler/) módulo. – FriendFX
"aproximaciones más simples" vínculo se rompe - ¿tenía intención de vincular a [este mensaje] (https://mail.python.org/pipermail/python-list/2008-January/510696.html)? – Air
Qué pasa si su objeto es bastante simple, como un diccionario con un 'Int -> (Int, Int)' mapeo? En teoría, calcular el tamaño de tal objeto debería ser simple, ¿no? –
No tengo ninguna experiencia personal con cualquiera de los siguientes, pero una simple búsqueda de un "Python [Memoria] perfilador" rendimiento:
PySizer "un perfilador de memoria para Python," que se encuentra en http://pysizer.8325.org/. Sin embargo, la página parece indicar que el proyecto no se ha actualizado durante un tiempo, y se refiere a ...
Heapy, "soporte [ing] depuración y optimización con respecto a problemas relacionados con la memoria en programas Python", que se encuentra en http://guppy-pe.sourceforge.net/#Heapy.
Espero que ayude.
Otro enfoque es usar pickle. Ver this answer a un duplicado de esta pregunta.
Es un enfoque extremadamente sensato * y *. –
estoy realmente interesado por su respuesta, pero no se puede acceder al enlace que sus puntos de respuesta a ... –
@YohanObadia Acabo de intentar el enlace y funcionó ... Es otra Así que la respuesta. – drevicko
Prueba esto:
sys.getsizeof(object)
getsizeof() llama el método del objeto __sizeof__
y añade una sobrecarga recolector de basura adicional si el objeto es administrado por el recolector de basura.
hace esto sys.getsizeof valor (objeto) de retorno incluye el tamaño del objeto real en lugar del tamaño de su puntero como se ha dicho anteriormente fserb? –
No, devolverá el tamaño del puntero. – lstyls
Esta debe ser utilizado con cuidado debido a una anulación de los objetos __sizeof__ podría inducir a error.
Al usar bregman.suite, algunas pruebas con sys.getsizeof dan como resultado una copia de un objeto de matriz (datos) en una instancia de objeto que es más grande que el objeto mismo (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>
Para objetos grandes que usted puede usar un método algo tosco pero eficaz: verificación de la cantidad de memoria su proceso de Python ocupa en el sistema, a continuación, eliminar el objeto y comparar.
Este método tiene muchas desventajas, pero le dará una estimación muy rápida para objetos muy grandes.
Es poco probable que esto sea efectivo. La memoria liberada en un proceso no tiene que devolverse al sistema operativo, por lo que buscar una disminución en el uso de la memoria puede no ser precisa. –
Un enfoque similar de medir el uso de recursos de proceso de Python antes de que se cree y después el objeto sería bastante efectivo. –
No crea que @AntonyHatchkins como administrador de memoria python no obtenga necesariamente memoria nueva de los sistemas operativos. Hasta cierto punto, el grupo de memoria se mantiene asignado incluso si no está en uso, de modo que cuando hay una nueva solicitud, se puede cumplir sin la necesidad de solicitar más memoria del sistema operativo. En otras palabras, este enfoque no es confiable tanto para la creación como para la destrucción de objetos. – spider
- 1. Averiguar cuánta memoria está siendo utilizada por un objeto en C#?
- 2. ¿Puede recordarme Memcache cuánta memoria está usando?
- 3. Cuánta memoria está bloqueada en un proceso
- 4. ¿Cómo puedo determinar cuánta memoria está usando mi programa .NET?
- 5. ¿Cuánta memoria se asigna para un objeto Integer en Java? ¿Cómo averiguar este valor para cualquier objeto personalizado?
- 6. ¿Cuánta RAM está usando realmente SQL Server?
- 7. La secuencia de comandos de Python sabe cuánta memoria está usando
- 8. cuánta memoria toma un hilo en java
- 9. ¿Cómo puedo saber cuánta memoria está físicamente instalada en Windows?
- 10. ¿Cómo puedo saber cuánta memoria está asignada a un objeto javascript?
- 11. Durante la ejecución, ¿cómo puede un programa Java decir cuánta memoria está usando?
- 12. ¿Cuánta memoria tiene mi hilo de Java?
- 13. zlib, deflate: ¿Cuánta memoria asignar?
- 14. ¿Cuánta memoria usa un puntero C++?
- 15. ¿Cómo puedo averiguar si un objeto está bloqueado? C#
- 16. ¿Cómo puedo saber cuánta memoria está consumiendo un .dominio de aplicaciones .Net?
- 17. ¿Cuánta memoria debería poder asignar?
- 18. ¿Cuánta memoria usa una Hashtable?
- 19. ¿Cuánta memoria podría utilizar vm
- 20. ¿cómo puedo ver cuánta memoria está usando mi aplicación sin su presupuesto de VM?
- 21. ¿Cuánta memoria usa numpy ndarray?
- 22. ¿Cómo puedo saber cuánta memoria utiliza un objeto de control en matlab
- 23. ¿Cuánta memoria ocupará un valor nulo en un DB?
- 24. ¿Cuánta memoria tiene una constante en C?
- 25. ¿Determinar cuánta memoria usa una clase?
- 26. ¿Cuánta memoria usa el puntero nulo?
- 27. ¿Cuánta memoria debe asignar 'managed_shared_memory'? (Impulso)
- 28. ¿Cuánta memoria tiene antes de ser grosera?
- 29. ¿Cómo sabe MemoryCache cuánta memoria usa?
- 30. ¿Cómo puedo saber cuánta energía está usando mi computadora?
Similar: http://stackoverflow.com/questions/449560/how-do-i-determine-the-size-of-an-object-in-python –
objgraph se ve muy interesante: http: //mg.pov .lt/objgraph/ –
gráfica de prueba: http://stackoverflow.com/a/30008338/2087463 – tmthydvnprt