您将如何找出一个对象使用了多少内存?我知道可以知道一个代码块使用了多少,但不能知道实例化的对象(在其生命周期中的任何时候)使用了多少,而这正是我想要的。
我没有任何个人经验,以下任何一个,但一个简单的搜索“Python[内存]分析器”得到:
PySizer,“Python内存分析器”,可以在http://pysizer.8325.org/找到。然而,该页面似乎表明该项目已经有一段时间没有更新了,并引用… Heapy,“支持Python程序中内存相关问题的调试和优化”,可以在http://guppy-pe.sourceforge.net/#Heapy上找到。
希望这能有所帮助。
There's no easy way to find out the memory size of a python object. One of the problems you may find is that Python objects - like lists and dicts - may have references to other python objects (in this case, what would your size be? The size containing the size of each object or not?). There are some pointers overhead and internal structures related to object types and garbage collection. Finally, some python objects have non-obvious behaviors. For instance, lists reserve space for more objects than they have, most of the time; dicts are even more complicated since they can operate in different ways (they have a different implementation for small number of keys and sometimes they over allocate entries).
有一大块代码(以及一大块更新后的代码)试图最好地近似内存中的python对象的大小。
您可能还想检查一些关于PyObject(表示几乎所有python对象的内部C结构体)的旧描述。
试试这个:
sys.getsizeof(object)
getsizeof()返回一个对象的字节大小。它调用对象的__sizeof__方法,如果对象由垃圾收集器管理,则会增加额外的垃圾收集器开销。
递归配方
这必须小心使用,因为覆盖对象__sizeof__可能会产生误导。
使用bregman。套件,一些测试与系统。Getsizeof在对象实例中输出一个数组对象(data)的副本,该副本大于对象本身(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>
对于大的对象,你可以使用一些粗糙但有效的方法: 检查你的Python进程在系统中占用了多少内存,然后删除该对象并进行比较。
这种方法有很多缺点,但它会给你一个非常快速的估计非常大的对象。
推荐文章
- 在SQL Server上使用varchar(MAX) vs TEXT
- .toArray(new MyClass[0]) or .toArray(new MyClass[myList.size()])?
- 如何在Flask-SQLAlchemy中按id删除记录
- 在Python中插入列表的第一个位置
- Python Pandas只合并某些列
- 如何在一行中连接两个集而不使用“|”
- 从字符串中移除前缀
- 代码结束时发出警报
- 如何在Python中按字母顺序排序字符串中的字母
- 在matplotlib中将y轴标签添加到次要y轴
- 如何消除数独方块的凹凸缺陷?
- 为什么出现这个UnboundLocalError(闭包)?
- 使用Python请求的异步请求
- 是什么导致JNI调用变慢?
- 如何检查一个对象是否是python中的生成器对象?