python কশন পাইথনের একটি বস্তুর দ্বারা কত মেমরি ব্যবহার করা হচ্ছে তা জানুন




পাইথন ভাষায় ডিকশনারি কেন ব্যবহার করা হয় (5)

এই প্রশ্নটি ইতিমধ্যে একটি উত্তর আছে:

কিভাবে আপনি একটি বস্তুর দ্বারা কত মেমরি ব্যবহার করা হয় তা খুঁজে বের করতে যেতে হবে? আমি জানি কোডটি ব্লকের কতটুকু ব্যবহার করা যায়, কিন্তু কোনও তাত্ক্ষণিক বস্তু (যে কোন সময় তার জীবনের সময়) দ্বারা এটি ব্যবহার করা সম্ভব নয়, যা আমি চাই।


একটি পাইথন বস্তুর মেমরি আকার খুঁজে বের করার কোন সহজ উপায় নেই । আপনার সমস্যাগুলির মধ্যে একটি পাইথন বস্তু - যেমন তালিকা এবং ডিক্টগুলি - অন্য পাইথন বস্তুর উল্লেখ থাকতে পারে (এই ক্ষেত্রে, আপনার আকার কী হবে? আকারটি প্রতিটি বস্তুর আকার ধারণ করে নাকি?)। বস্তুর ধরন এবং আবর্জনা সংগ্রহ সম্পর্কিত কিছু পয়েন্টার ওভারহেড এবং অভ্যন্তরীণ কাঠামো রয়েছে। অবশেষে, কিছু পাইথন বস্তু অ-সুস্পষ্ট আচরণ করে। উদাহরণস্বরূপ, তাদের অধিকাংশ বস্তুর চেয়ে বেশি বস্তুর জন্য সংরক্ষিত স্থান তালিকাভুক্ত করে, বেশিরভাগ সময়; ডিক্টগুলি আরও জটিল কারণ তারা বিভিন্ন উপায়ে কাজ করতে পারে (তাদের কাছে ছোট সংখ্যক কীগুলির জন্য একটি ভিন্ন বাস্তবায়ন রয়েছে এবং কখনও কখনও তারা এন্ট্রি বরাদ্দ করার জন্য)।

স্মৃতিতে একটি পাইথন বস্তুর আকারটি আনুমানিকভাবে সর্বোত্তম করার চেষ্টা করার জন্য কোডটির একটি বড় অংশ (এবং কোডের একটি আপডেট করা বড় অংশ ) রয়েছে।

আপনি পাইওবেক্ট (আভ্যন্তরীণ সি স্ট্রাক যা প্রায় সব পাইথন বস্তুগুলিকে প্রতিনিধিত্ব করে) সম্পর্কে কিছু পুরানো বর্ণনাও দেখতে চাইতে পারেন।


নিম্নলিখিতগুলির মধ্যে আমার কোনও ব্যক্তিগত অভিজ্ঞতা নেই তবে "পাইথন [মেমরি] প্রোফাইলার" উত্পাদনের জন্য সহজ অনুসন্ধান:

  • PySizer, "পাইথনের জন্য মেমরি প্রোফাইলার", http://pysizer.8325.org/ এ পাওয়া যায়। তবে পৃষ্ঠাটি ইঙ্গিত দেয় যে প্রকল্পটিকে কিছুক্ষণের জন্য আপডেট করা হয়নি, এবং এটি বোঝায় ...

  • হ্যাপি, পাইগন প্রোগ্রামগুলিতে মেমরি সংক্রান্ত সমস্যাগুলির বিষয়ে ডিবাগিং এবং অপ্টিমাইজেশন সমর্থন করে [ http://guppy-pe.sourceforge.net/#Heapy

আশা করি এইটি কাজ করবে.


এই যত্নের সাথে ব্যবহার করা উচিত কারণ __sizeof__ বস্তুর উপর একটি override বিভ্রান্তিকর হতে পারে।

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>

আরেকটি পদ্ধতির পিচ্ছিল ব্যবহার করা হয়। এই প্রশ্নের একটি সদৃশ এই উত্তর দেখুন।


বড় বস্তুর জন্য আপনি কিছুটা অপ্রয়োজনীয় কিন্তু কার্যকরী পদ্ধতি ব্যবহার করতে পারেন: আপনার পাইথন প্রক্রিয়াটি সিস্টেমে কত পরিমাণ মেমরি রয়েছে তা পরীক্ষা করুন, তারপর বস্তু মুছে ফেলুন এবং তুলনা করুন।

এই পদ্ধতিতে অনেকগুলি ত্রুটি রয়েছে তবে এটি আপনাকে খুব বড় বস্তুর জন্য খুব দ্রুত অনুমান দেবে।





memory-profiling