如何在windows中查找python进程/对象使用的内存总量
我有一些脚本,可以将大量数据加载到内存中。 我想知道存储在内存中的数据有多高效。 所以,我想知道python在加载数据之前和加载数据之后使用了多少内存。 我还想知道,这是否是检查复杂对象内存使用情况的某种方法。 假设我有一个嵌套字典,里面有不同类型的数据。我怎么知道这本字典中的所有数据使用了多少内存。 谢谢如何在windows中查找python进程/对象使用的内存总量,python,windows,memory-management,Python,Windows,Memory Management,我有一些脚本,可以将大量数据加载到内存中。 我想知道存储在内存中的数据有多高效。 所以,我想知道python在加载数据之前和加载数据之后使用了多少内存。 我还想知道,这是否是检查复杂对象内存使用情况的某种方法。 假设我有一个嵌套字典,里面有不同类型的数据。我怎么知道这本字典中的所有数据使用了多少内存。 谢谢 Alex据我所知,没有简单的方法可以看出某个对象的内存消耗是多少。这将是一件非常重要的事情,因为引用可以在对象之间共享 以下是我最喜欢的两种变通方法: 使用流程管理器。分配前让程序暂停一段时
Alex据我所知,没有简单的方法可以看出某个对象的内存消耗是多少。这将是一件非常重要的事情,因为引用可以在对象之间共享 以下是我最喜欢的两种变通方法:
pickle.dump
序列化数据结构。生成的pickle在大小上与在内存中存储数据结构所需的空间相当(不完全相同!)。为了获得更好的结果,请使用二进制pickle协议您可以查看这个包,它可以为您提供有关每个加载对象所使用内存的信息。不幸的是,它在python>=2.6下似乎不起作用,但如果您最多使用Python2.5,这就很好了。 它的用法非常简单,只需在代码中输入以下几行代码,即可收集内存信息:
from guppy import hpy
hp = hpy()
print hp.heap()
这将为您提供如下输出:
Partition of a set of 25961 objects. Total size = 1894868 bytes.
Index Count % Size % Cumulative % Kind (class / dict of class)
0 11901 46 775408 41 775408 41 str
1 6040 23 219964 12 995372 53 tuple
2 1718 7 116824 6 1112196 59 types.CodeType
3 73 0 113608 6 1225804 65 dict of module
4 348 1 107232 6 1333036 70 dict (no owner)
5 196 1 100192 5 1433228 76 dict of type
6 1643 6 92008 5 1525236 80 function
7 209 1 90572 5 1615808 85 type
8 144 1 76800 4 1692608 89 dict of class
9 984 4 35424 2 1728032 91 __builtin__.wrapper_descriptor
为了分析对象使用的内存量,您可以使用:
另一种选择是,您可以通过pywin32使用windows的性能计数器,我的错误是,它最多与python2.5兼容,而不是与2.6兼容
>>> from pympler import asizeof
>>> obj = dict(nested=dict(trash=[1,2,3]))
>>> asizeof.asizeof(obj)
800
>>> asizeof.asizeof(obj['nested'])
480
>>> asizeof.asizeof(obj['nested']['trash'])
160
>>> asizeof.asizeof(obj['nested']['trash'][0])
24