2009-04-14 7 views
12

किसी ऑब्जेक्ट की मेमोरी पदचिह्न का अनुमान लगाने का एक अच्छा तरीका क्या है?पायथन: डेटा संरचनाओं की स्मृति पदचिह्न का आकलन/गणना कैसे करें?

इसके विपरीत, पदचिह्न को मापने का एक अच्छा तरीका क्या है?

उदाहरण के लिए, मैं एक शब्दकोश जिनके मान पूर्णांक की सूची रहे हैं कहते हैं, tuples फ्लोट:

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

मैं भौतिक स्मृति की 4G है और यह पता लगाने के लिए करना चाहते लगभग कितने पंक्तियों (कुंजी: मान) मैं स्वैप में फैलाने से पहले स्मृति में स्टोर कर सकता हूं। यह लिनक्स/उबंटू 8.04 और ओएस एक्स 10.5.6 पर है।

इसके अलावा, मेरे प्रोग्राम के वास्तविक इन-मेमोरी पदचिह्न को जानने का सबसे अच्छा तरीका क्या है? जब मैं भौतिक स्मृति और स्पिलिंग थकाऊ हो तो मैं सबसे अच्छा कैसे पता लगा सकता हूं?

उत्तर

9

Guppy एक अच्छा स्मृति प्रोफाइलर (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, एक छोटे से underdocumented है ताकि आप वेब पेज या स्रोत कोड के माध्यम से एक छोटे से खुदाई करने के लिए हो सकता है, लेकिन यह बहुत शक्तिशाली है। कुछ articles भी प्रासंगिक हो सकते हैं।

+1

'डी' में 6 'str' ऑब्जेक्ट्स क्यों हैं? –

+0

जब एक नया चर बाध्यकारी होता है, तो एक नई स्ट्रिंग बनाई जाती है ('डी')। विशेषता लुकअप (ढेर) दूसरे के लिए खाते हैं। मुझे नहीं पता कि बाकी कहां से आ रहा है। –

+0

वास्तविक परिणाम भिन्न होते हैं और आपको या तो उन विशेष दुभाषिया कार्यान्वयन के विरुद्ध जांच करनी चाहिए जो आप उपयोग कर रहे हैं या भिन्नता खोजने के लिए कुछ परीक्षण-और-त्रुटि करते हैं। उदाहरण के लिए, मैंने अभी उपर्युक्त उदाहरण की कोशिश की है और यह कुल 96 स्ट्रिंग्स के तीन तारों की सूचना दी है। –

5

आप एक स्मृति प्रोफाइलर, जिनमें से एक जोड़े को मैं के बारे में पता कर रहा हूँ कर रहे हैं के साथ ऐसा कर सकते हैं:

  1. PySizer - poissibly अप्रचलित, मुखपृष्ठ के रूप में अब सिफारिश की गई है:

  2. Heapy

यह संभवतः this प्रश्न का डुप्लिकेट है।

संबंधित मुद्दे