15

オブジェクトのメモリフットプリントを見積もる良い方法は何ですか?

逆に、フットプリントを測定する良い方法は何ですか?

たとえば、値が整数の浮動小数点タプルのリストである辞書があるとします。

d['key'] = [ (1131, 3.11e18), (9813, 2.48e19), (4991, 9.11e18) ]

私は4Gの物理メモリを持っており、スワップに流出する前にメモリに格納できる行(key:values)のおおよその数を把握したいと思います。これはlinux/ubuntu8.04およびOSX10.5.6にあります。

また、私のプログラムの実際のメモリ内フットプリントを把握するための最良の方法は何ですか?それが物理的なメモリを使い果たしてこぼれているときをどのように最もよく理解するのですか?

4

2 に答える 2

10

グッピーには素晴らしいメモリプロファイラーがあります(Heapy):

>>> from guppy import hpy
>>> hp = hpy()
>>> hp.setrelheap() # ignore all existing objects
>>> d = {}
>>> d['key'] = [ (1131, 3.11e18), (9813, 2.48e19), (4991, 9.11e18) ]
>>> hp.heap()
 Partition of a set of 24 objects. Total size = 1464 bytes.
 Index  Count   %     Size   % Cumulative  % Kind (class / dict of class)
     0      2   8      676  46       676  46 types.FrameType
     1      6  25      220  15       896  61 str
     2      6  25      184  13      1080  74 tuple
 ...

Heapyは少し文書化されていないため、Webページやソースコードを少し掘り下げる必要があるかもしれませんが、非常に強力です。関連するかもしれないいくつかの記事もあります。

于 2009-04-14T22:53:08.783 に答える
5

これは、メモリプロファイラーを使用して行うことができます。私が知っているカップルがあります。

  1. PySizer-ホームページが現在推奨しているように、おそらく時代遅れです:

  2. ヒーピー

これはおそらくこの質問の複製です。

于 2009-04-14T22:46:55.617 に答える