dwe*_*ook 195 python performance memory-profiling
你将如何找出一个对象使用了多少内存?我知道有可能找出代码块使用了多少,但不是实例化对象(在其生命中的任何时间),这就是我想要的.
Uze*_*zer 106
试试这个:
sys.getsizeof(object)
Run Code Online (Sandbox Code Playgroud)
如果对象由垃圾收集器管理,则getsizeof()调用对象的__sizeof__方法并添加额外的垃圾收集器开销.
fse*_*erb 102
找不到python对象的内存大小是没有简单的方法.你可能会发现的一个问题是Python对象 - 比如列表和dicts - 可能引用了其他python对象(在这种情况下,你的大小是什么?包含每个对象大小的大小?).有一些指针开销和与对象类型和垃圾收集相关的内部结构.最后,一些python对象具有非显而易见的行为.例如,列出大多数时间为更多对象预留空间; dicts甚至更复杂,因为它们可以以不同的方式操作(它们对于少量密钥具有不同的实现,并且有时它们超过分配条目).
有一大块代码(以及更新的大块代码)在那里试图最好地估计内存中python对象的大小.
您可能还想查看一些关于PyObject的旧描述(几乎所有python对象的内部C结构).
小智 7
我对以下任一方面都没有任何个人经验,但对“Python [内存] 分析器”的简单搜索结果如下:
PySizer,“Python 内存分析器”,可在http://pysizer.8325.org/找到。但是该页面似乎表明该项目有一段时间没有更新,并且指的是...
Heapy,“支持 [ing] Python 程序中内存相关问题的调试和优化”,见http://guppy-pe.sourceforge.net/#Heapy。
希望有帮助。
这必须小心使用,因为对对象 __sizeof__ 的覆盖可能会产生误导。
使用 bregman.suite,一些使用 sys.getsizeof 的测试输出对象实例中数组对象(数据)的副本,因为它比对象本身(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>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
130887 次 |
| 最近记录: |