में किसी ऑब्जेक्ट द्वारा कितनी मेमोरी का उपयोग किया जा रहा है, यह पता लगाने के लिए कि आप ऑब्जेक्ट द्वारा कितनी मेमोरी का उपयोग कर रहे हैं? मुझे पता है कि यह पता लगाना संभव है कि कोड के ब्लॉक द्वारा कितना उपयोग किया जाता है, लेकिन किसी तत्काल वस्तु (कभी भी इसके जीवन के दौरान) नहीं, जो मैं चाहता हूं।पता लगाएं कि किसी ऑब्जेक्ट द्वारा पाइथन
उत्तर
पाइथन ऑब्जेक्ट के मेमोरी आकार को खोजने का कोई आसान तरीका नहीं है। आपको जो समस्याएं मिल सकती हैं वह यह है कि पाइथन ऑब्जेक्ट्स - सूचियों और डिक्ट्स की तरह - अन्य पायथन ऑब्जेक्ट्स के संदर्भ हो सकते हैं (इस मामले में, आपका आकार क्या होगा? प्रत्येक ऑब्जेक्ट का आकार वाला आकार या नहीं?)। ऑब्जेक्ट प्रकारों और कचरा संग्रह से संबंधित कुछ पॉइंटर्स ओवरहेड और आंतरिक संरचनाएं हैं। अंत में, कुछ अजगर वस्तुओं में गैर-स्पष्ट व्यवहार होते हैं। उदाहरण के लिए, अधिकतर वस्तुओं के लिए आरक्षित स्थान सूचीबद्ध करता है, अधिकतर समय; dicts और भी जटिल है क्योंकि वे अलग अलग तरीकों से काम कर सकते हैं कर रहे हैं (वे कुंजी की छोटी संख्या के लिए एक अलग कार्यान्वयन है और कभी कभी वे अधिक प्रविष्टियों का आवंटन)।
मेमोरी में एक पायथन ऑब्जेक्ट के आकार का सबसे अच्छा अनुमान लगाने के लिए वहां big chunk of code (और updated big chunk of code) है। कुछ simpler approximations भी हैं। लेकिन वे हमेशा अनुमानित होंगे।
तुम भी कुछ old description about PyObject (आंतरिक सी struct कि लगभग सभी अजगर वस्तुओं प्रतिनिधित्व करता है) की जाँच कर सकते हैं।
@culix: ऐसा लगता है कि अब इसे [Pympler] में उपयोग किया जाता है (http://pythonhosted.org/Pympler/) मॉड्यूल। – FriendFX
"सरल अनुमान" लिंक टूटा हुआ है - क्या आप [इस संदेश] से लिंक करना चाहते थे (https://mail.python.org/pipermail/python-list/2008-January/510696.html)? – Air
क्या होगा यदि आपका ऑब्जेक्ट बहुत आसान है, जैसे 'Int -> (Int, Int) 'मैपिंग वाला एक dict सिद्धांत रूप में, इस तरह के किसी वस्तु के आकार की गणना करना सरल होना चाहिए, है ना? –
मैं नहीं निम्नलिखित में से किसी के साथ किसी भी व्यक्तिगत अनुभव है, लेकिन एक "अजगर [स्मृति] प्रोफाइलर" उपज के लिए एक सरल खोज:
PySizer, "अजगर के लिए एक स्मृति प्रोफाइलर," पाया http://pysizer.8325.org/ पर। हालांकि यह पृष्ठ इंगित करता है कि परियोजना को थोड़ी देर के लिए अद्यतन नहीं किया गया है, और यह संदर्भित करता है ...
हेपी, "पाइथन कार्यक्रमों में स्मृति संबंधी मुद्दों के बारे में डीबगिंग और अनुकूलन का समर्थन [आईएनजी] http://guppy-pe.sourceforge.net/#Heapy।
आशा है कि मदद करता है।
एक और दृष्टिकोण अचार का उपयोग करना है। इस प्रश्न के डुप्लिकेट पर this answer देखें।
यह बेहद समझदार * और * सरल दृष्टिकोण है। –
मैं वास्तव में आपके उत्तर से रूचि रखता हूं लेकिन आपके उत्तर को इंगित करने वाले लिंक तक नहीं पहुंच सकता ... –
@YohanObadia मैंने अभी लिंक की कोशिश की और यह काम किया ... यह एक और SO जवाब है। – drevicko
इस प्रयास करें:
sys.getsizeof(object)
getsizeof() वस्तु की __sizeof__
प्रणाली को बुलाती है और एक अतिरिक्त कचरा कलेक्टर भूमि के ऊपर अगर वस्तु कचरा कलेक्टर द्वारा किया जाता है कहते हैं।
क्या यह sys.getsizeof (ऑब्जेक्ट) रिटर्न वैल्यू में उनके पॉइंटर के आकार के बजाय असली ऑब्जेक्ट आकार शामिल है जैसा कि ऊपर बताए गए fserb ने कहा है? –
नहीं, यह सूचक का आकार वापस कर देगा। – lstyls
यह सावधानी से किया जाना चाहिए, क्योंकि वस्तुओं __sizeof__ गुमराह किया जा सकता है पर एक ओवरराइड।
bregman.suite का उपयोग करके, sys.getsizeof के साथ कुछ परीक्षण ऑब्जेक्ट उदाहरण में एक सरणी ऑब्जेक्ट (डेटा) की प्रतिलिपि ऑब्जेक्ट (mfcc) से बड़ा होने के रूप में आउटपुट करते हैं।
>>> mfcc = MelFrequencyCepstrum(filepath, params)
>>> data = mfcc.X[:]
>>> sys.getsizeof(mfcc)
64
>>> sys.getsizeof(mfcc.X)
>>>80
>>> sys.getsizeof(data)
80
>>> mfcc
<bregman.features.MelFrequencyCepstrum object at 0x104ad3e90>
बड़ा वस्तुओं आप कुछ हद तक एक कच्चे लेकिन प्रभावी तरीका उपयोग कर सकते हैं के लिए: जांच कितनी स्मृति अपने अजगर प्रक्रिया प्रणाली में पर है, तो वस्तु हटा सकते हैं और तुलना करें।
इस विधि में कई कमीएं हैं लेकिन यह आपको बहुत बड़ी वस्तुओं के लिए एक बहुत तेज़ अनुमान देगा।
यह प्रभावी होने की संभावना नहीं है। एक प्रक्रिया में मुक्त स्मृति को ऑपरेटिंग सिस्टम में वापस नहीं किया जाना चाहिए, इसलिए स्मृति उपयोग में कमी की तलाश करना सटीक नहीं हो सकता है। –
ऑब्जेक्ट बनने से पहले पायथन प्रक्रिया संसाधन उपयोग को मापने का एक समान दृष्टिकोण और बाद में काफी प्रभावी होगा। –
ऐसा मत सोचो @ एंटीनी हैचकिन्स को पाइथन मेमोरी मैनेजर के रूप में ऑपरेटिंग सिस्टम से नई मेमोरी नहीं मिलती है। कुछ हद तक, उपयोग में नहीं होने पर भी मेमोरी पूल आवंटित किया जाता है, इसलिए जब कोई नया अनुरोध होता है, तो इसे ऑपरेटिंग सिस्टम से अधिक मेमोरी का अनुरोध किए बिना पूरा किया जा सकता है। दूसरे शब्दों में, यह दृष्टिकोण वस्तुओं के निर्माण और विनाश दोनों के लिए अविश्वसनीय है। – spider
- 1. पता लगाएं कि पाइथन
- 2. पता लगाएं कि उपयोगकर्ता द्वारा
- 3. पता लगाएं कि किसी ऑब्जेक्ट का प्रकार .NET Framework
- 4. पता लगाएं कि जब कोई पाइथन मॉड्यूल
- 5. पता लगाएं कि सी # में किसी ऑब्जेक्ट द्वारा कितनी मेमोरी का उपयोग किया जा रहा है?
- 6. पता लगाएं कि हैश
- 7. पता लगाएं कि फ़ाइल
- 8. पता लगाएं कि स्ट्रिंग
- 9. पता लगाएं कि सी #
- 10. पता लगाएं कि
- 11. पता लगाएं कि एंड्रॉइड
- 12. पता लगाएं कि कोड
- 13. पता लगाएं कि UIScrollView
- 14. पता लगाएं कि लिनक्स
- 15. पता लगाएं कि Django
- 16. पता लगाएं कि आपके डीबगर
- 17. पता लगाएं कि फोरग्राउंड विंडो
- 18. पता लगाएं कि कोई पाइथन मॉड्यूल बदलता है और फिर
- 19. पता लगाएं कि किस वर्ग को किसी अन्य वर्ग
- 20. पता लगाएं कि वर्तमान समय
- 21. पता लगाएं कि POSIX सिस्टम
- 22. पता लगाएं कि क्या UILocalNotification
- 23. आईपीथॉन नोटबुक - पता लगाएं कि जावास्क्रिप्ट
- 24. पता लगाएं कि यूटीएफ -8
- 25. पता लगाएं कि कोई वीडियोविव
- 26. पता लगाएं कि क्या यूआरआई
- 27. पता लगाएं कि टाइप तत्काल
- 28. पता लगाएं कि वीबी 6
- 29. जेट्टी: पता लगाएं कि वेबपैप
- 30. पता लगाएं कि उपयोगकर्ता टेक्स्टरेरा
समान: http://stackoverflow.com/questions/449560/how-do-i-determine-the-size-of-an-object-in-python –
objgraph दिलचस्प लग रहा है: http: //mg.pov .lt/objgraph/ –
ग्राफिकल टेस्ट: http://stackoverflow.com/a/30008338/2087463 – tmthydvnprt