Μάθετε πόση μνήμη χρησιμοποιείται από ένα αντικείμενο σε Python

ψήφοι
149

Πώς θα πάτε για να μάθετε πόση μνήμη χρησιμοποιείται από ένα αντικείμενο; Ξέρω ότι είναι δυνατόν για να μάθετε πόσο χρησιμοποιείται από ένα μπλοκ κώδικα, αλλά όχι από μια υπόσταση αντικειμένου (οποιαδήποτε στιγμή κατά τη διάρκεια της ζωής του), το οποίο είναι αυτό που θέλω.

Δημοσιεύθηκε 29/08/2008 στις 05:59
πηγή χρήστη
Σε άλλες γλώσσες...                            


6 απαντήσεις

ψήφοι
4

Δεν έχω καμία προσωπική εμπειρία με κάποιο από τα παρακάτω, αλλά μια απλή αναζήτηση για «Python [μνήμη] profiler» απόδοση:

  • PySizer, "ένα profiler μνήμης για Python", που βρέθηκαν σε http://pysizer.8325.org/ . Ωστόσο, η σελίδα φαίνεται να δείχνει ότι το έργο δεν έχει ενημερωθεί για κάποιο χρονικό διάστημα, και αναφέρεται στην ...

  • Heapy, «υποστήριξη [ing] εντοπισμό σφαλμάτων και βελτιστοποίηση για θέματα που σχετίζονται με τη μνήμη στα προγράμματα Python», που βρέθηκαν σε http://guppy-pe.sourceforge.net/#Heapy .

Ελπίδα που βοηθά.

Απαντήθηκε 29/08/2008 στις 06:33
πηγή χρήστη

ψήφοι
85

Δεν υπάρχει εύκολος τρόπος για να μάθετε το μέγεθος της μνήμης ενός αντικειμένου python . Ένα από τα προβλήματα που μπορεί να βρει είναι ότι η Python αντικείμενα - όπως λίστες και DICTS - μπορεί να έχει αναφορές σε άλλα αντικείμενα python (σε αυτή την περίπτωση, τι θα το μέγεθός σας είναι το μέγεθος που περιέχει το μέγεθος του κάθε αντικειμένου ή όχι;). Υπάρχουν μερικοί δείκτες γενικά και οι εσωτερικές δομές που σχετίζονται με την αντίρρηση τους τύπους και τη συλλογή σκουπιδιών. Τέλος, ορισμένα αντικείμενα python έχουν μη-προφανή συμπεριφορές. Για παράδειγμα, αναφέρει χώρο αποθεματικό για περισσότερα αντικείμενα από ό, τι έχουν, τις περισσότερες φορές? DICTS είναι ακόμη πιο περίπλοκη, δεδομένου ότι μπορούν να λειτουργήσουν με διαφορετικούς τρόπους (που έχουν μια διαφορετική εφαρμογή για μικρό αριθμό των κλειδιών και μερικές φορές διαθέσει πάνω από συμμετοχές).

Υπάρχει ένα μεγάλο κομμάτι του κώδικα (και μια ενημερωμένη μεγάλο κομμάτι του κώδικα ) εκεί έξω για να προσπαθήσει να προσεγγίσει καλύτερα το μέγεθος ενός αντικειμένου πύθωνα στη μνήμη.

Μπορεί επίσης να θέλετε να ελέγξετε κάποια παλαιά περιγραφή για PyObject (την εσωτερική struct C, που αντιπροσωπεύει σχεδόν όλα τα αντικείμενα python).

Απαντήθηκε 30/08/2008 στις 04:25
πηγή χρήστη

ψήφοι
25

Μια άλλη προσέγγιση είναι η χρήση τουρσί. Δείτε την απάντηση σε ένα αντίγραφο αυτού του ερωτήματος.

Απαντήθηκε 16/10/2012 στις 23:25
πηγή χρήστη

ψήφοι
67

Δοκιμάστε αυτό:

sys.getsizeof(object)

getsizeof () καλεί του αντικειμένου __sizeof__μέθοδο και προσθέτει μια πρόσθετη επιβάρυνση συλλέκτη σκουπιδιών , αν το αντικείμενο διοικείται από τον συλλέκτη σκουπιδιών.

Μια αναδρομική συνταγή

Απαντήθηκε 08/11/2013 στις 19:11
πηγή χρήστη

ψήφοι
2

Αυτό θα πρέπει να χρησιμοποιείται με προσοχή, γιατί η παράκαμψη στα αντικείμενα __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>
Απαντήθηκε 03/01/2014 στις 15:54
πηγή χρήστη

ψήφοι
-2

Για μεγάλα αντικείμενα μπορείτε να χρησιμοποιήσετε μια κάπως αργό, αλλά αποτελεσματική μέθοδο: ελέγξτε πόση μνήμη διαδικασία σας Python καταλαμβάνει στο σύστημα, στη συνέχεια, διαγράψτε το αντικείμενο και να συγκρίνουν.

Η μέθοδος αυτή έχει πολλά μειονεκτήματα, αλλά αυτό θα σας δώσει μια πολύ γρήγορη εκτίμηση για πολύ μεγάλα αντικείμενα.

Απαντήθηκε 30/06/2014 στις 17:44
πηγή χρήστη

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more