2009-04-14 47 views
12

Cách tốt để ước tính dấu chân bộ nhớ của một đối tượng là gì?Python: Cách ước tính/tính toán dấu chân bộ nhớ của cấu trúc dữ liệu?

Ngược lại, cách tốt nhất để đo lường dấu chân là gì?

Ví dụ, nói rằng tôi có một cuốn từ điển có giá trị là danh sách các số nguyên, nổi tuples:

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

Tôi có 4G bộ nhớ vật lý và muốn tìm ra khoảng bao nhiêu hàng (key: giá trị) Tôi có thể lưu trữ trong bộ nhớ trước khi tôi tràn vào trao đổi. Đây là trên linux/ubuntu 8.04 và OS X 10.5.6.

Ngoài ra, cách tốt nhất để tìm ra dấu chân trong bộ nhớ thực tế của chương trình của tôi là gì? Làm thế nào để tôi tìm ra cách tốt nhất khi bộ nhớ vật lý cạn kiệt và tràn ra?

Trả lời

9

Guppy có một hồ sơ đẹp bộ nhớ (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 là một chút underdocumented, vì vậy bạn có thể phải khai thác thông qua các trang web hoặc mã nguồn một chút, nhưng nó rất mạnh mẽ. Ngoài ra còn có một số articles có thể có liên quan.

+1

Tại sao có 6 đối tượng 'str' trong 'd'? –

+0

Khi ràng buộc một biến mới, một chuỗi mới được tạo ra ('d'). Tài khoản tra cứu (heap) thuộc tính cho một tài khoản khác. Tôi không biết phần còn lại đến từ đâu. –

+0

Kết quả thực tế khác nhau và bạn phải kiểm tra chúng chống lại việc thực hiện thông dịch cụ thể mà bạn đang sử dụng hoặc thực hiện một số thử và lỗi để tìm phương sai. Ví dụ, tôi vừa thử ví dụ trên và nó báo cáo ba chuỗi tổng cộng 96 byte. –

5

Bạn có thể làm điều này với một hồ sơ bộ nhớ, trong đó có một cặp vợ chồng tôi biết:

  1. PySizer - poissibly lỗi thời, như trang chủ tại khuyến cáo:

  2. Heapy.

Đây có thể trùng lặp với câu hỏi this.

Các vấn đề liên quan