2009-04-14 9 views
12

Jaki jest dobry sposób na oszacowanie śladu pamięci obiektu?Python: Jak oszacować/obliczyć ślad pamięci struktur danych?

Odwrotnie, jaki jest dobry sposób na zmierzenie śladu?

Na przykład, że mam słownika, którego wartości są listy liczb całkowitych, float krotki:

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

mam 4G pamięci fizycznej i chciałbyś dowiedzieć się, w przybliżeniu, ile wierszy (kluczowe: wartości) Mogę przechowywać w pamięci, zanim rozleję się na wymianę. To jest na Linux/Ubuntu 8.04 i OS X 10.5.6.

Co jest najlepszym sposobem na poznanie rzeczywistego śladu w pamięci mojego programu? Jak najlepiej wymyślić, kiedy jest wyczerpująca pamięć fizyczna i rozlanie?

Odpowiedz

9

Guppy ma ładny profilera pamięci (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 jest trochę niejasna, więc może trzeba kopać za pośrednictwem strony internetowej lub kodu źródłowego trochę, ale to jest bardzo silny. Istnieje również pewna liczba articles, które mogą być istotne.

+1

Dlaczego w 'd' znajduje się 6 obiektów 'str'? –

+0

Po powiązaniu nowej zmiennej tworzony jest nowy ciąg znaków ("d"). Atrybuty wyszukiwania (sterty) dla innego konta. Nie wiem, skąd pochodzi reszta. –

+0

Rzeczywiste wyniki są różne i należy albo sprawdzić je pod kątem konkretnej implementacji interpretera, z którego korzystasz, albo wykonać próbę i błąd, aby znaleźć wariancję. Na przykład po prostu próbowałem powyższego przykładu i zgłosiło trzy ciągi o łącznej długości 96 bajtów. –

5

Można to zrobić za pomocą profilera pamięci, z których istnieje kilka Jestem świadomy:

  1. PySizer - poissibly przestarzały, jako głównej teraz poleca:

  2. Heapy.

Jest to prawdopodobnie duplikat pytania o numer this.

Powiązane problemy