Καλώς ορίσατε στο dotNETZone.gr - Σύνδεση | Εγγραφή | Βοήθεια
σε

 

Αρχική σελίδα Ιστολόγια Συζητήσεις Εκθέσεις Φωτογραφιών Αρχειοθήκες

Πόση μνήμη δεσμεύει ένα αντικείμενο;

Îåêßíçóå áðü ôï ìÝëïò epp1123. Τελευταία δημοσίευση από το μέλος Παναγιώτης Καναβός στις 29-07-2009, 15:17. Υπάρχουν 4 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  29-07-2009, 13:41 52843

    Πόση μνήμη δεσμεύει ένα αντικείμενο;

    Έχω μία κλάση "Car" που έχει τις μεθόδους τους και τα properties του. Σε κάποια στιγμή γράφω Car myCar = new Car(). Πως μπορώ να δω πόση μνήμη δεσμεύει το αντικείμενο myCar τύπου Car; 

    Γενικά το framework δίνει τη δυνατότητα σε κάποιον να δει πόση μνήμη δεσμεύουν τα αντικείμενα που φτιάχνονται μέσα σε ένα πρόγραμμα; 
  •  29-07-2009, 14:10 52844 σε απάντηση της 52843

    Απ: Πόση μνήμη δεσμεύει ένα αντικείμενο;

    Μπορείς να χρησιμοποιήσεις τον CLR Profiler που είναι δωρεάν. Από εκεί και πέρα υπάρχουν κι άλλοι profilers από τρίτους κατασκευαστές.


    Vir prudens non contra ventum mingit
  •  29-07-2009, 14:32 52845 σε απάντηση της 52843

    Απ: Πόση μνήμη δεσμεύει ένα αντικείμενο;

    Τί θέλεις να κάνεις? Από αυτό εξαρτάται και η απάντηση αλλά και το αν έχει νόημα η ερώτηση. Γενικά δεν υπάρχει εύκολος τρόπος να βρεις ακριβώς πόση μνήμη πιάνει ένα αντικείμενο καθώς ένα αντικείμενο μπορεί να έχει references σε άλλα. Κατά κανόνα δεν πρέπει να σε ενδιαφέρει πόσο μεγάλο είναι ένα αντικείμενο.

    Αν θέλεις να δεις γιατί το πρόγραμμα σου πιάνει πολύ μνήμη θα πρέπει να χρησιμοποιήσεις ένα profiler.
    Αν θέλεις να δεις πόσο μεγάλο είναι κάποιο structure, επειδή ίσως θέλεις να το περάσεις σε κάποιo Win32 API, μπορείς να χρησιμοποιήσεις τη sizeof.
    Αν θέλεις να κάνεις το ίδιο για μία κλάση, υπάρχει η Marshal.SizeOf, η οποία όμως δεν θα υπολογίσει το μέγεθος άλλων αντικειμένων που μπορεί να συνδέονται με το δικό σου.
    Αν θέλεις πειραματικά να δεις πόσο χώρο πιάνει ένα μεγάλο collection ή ένα περίπλοκο αντικείμενο, μπορείς να το κάνεις serialize σε binary μορφή και να δεις το μέγεθος του blob που θα δημιουργηθεί.

    Τί θέλεις να κάνεις?


    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
  •  29-07-2009, 15:09 52847 σε απάντηση της 52845

    Απ: Πόση μνήμη δεσμεύει ένα αντικείμενο;

    Η ιστορία ξεκίνησε με την απλή σκέψη: Ξέρουμε πως οι primitive types δεσμεύουν κάποια μνήμη, όπου η ποσότητα που δεσμεύεται είναι γνωστή. Τα αντικείμενα υπάρχουν μέσα στη μνήμη άρα και αυτά κάποια ποσότητα θα δεσμεύουν. Το θέμα είναι πόση; Αυτό και μόνο.
  •  29-07-2009, 15:17 52848 σε απάντηση της 52847

    Απ: Πόση μνήμη δεσμεύει ένα αντικείμενο;

    Τα Primitive και Value Types δεσμεύουν συγκεκριμένη μνήμη, τα αντικείμενα όχι. Δεν μπορείς να το βρεις αυτό γιατί ένα όπως σου είπα ένα αντικείμενο μπορεί να έχει references σε άλλα αντικείμενα. Όταν τα πεδία είναι value types μπορείς να βρεις το μέγεθος τους με την sizeof, όταν όμως είναι reference types θα πάρεις πίσω το μέγεθος του reference και όχι του αντικειμένου. Αν για παράδειγμα έχεις ένα List<Car> το sizeof δεν θα σου επιστρέψει το μέγεθος των Car, μόνο της λίστας.

    Μπορείς να χρησιμοποιήσεις την Marshal.SizeOf για να βρεις προσεγγιστικά το μέγεθος ενός αντικειμένου (χωρίς τα related αντικείμενα).


    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems