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

 

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

Me.MyDataSet.Dispose()

Îåêßíçóå áðü ôï ìÝëïò thanad. Τελευταία δημοσίευση από το μέλος anzap στις 22-09-2005, 00:22. Υπάρχουν 3 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  20-09-2005, 21:06 5596

    Beer [B] Me.MyDataSet.Dispose()

    Γειά και χαρά σε όλους.

    Εχω μια ASP.NET εφαρμογή, που κάνει διάφορα καλούδια, αλλά έχει πολύ DataTraffic, over the web.

    O Web Server (2 x Intel Xeon 3.2, 4GB RAM), είναι ο.κ, παρόλο το traffic και το processing.

     Θέλω όμως να μην σπαταλώ τα resources και γενικότερα να έχω πάντα όσο μπορώ περισσότερα resources διαθέσιμα (τώρα κάτι είπα...)Cool [H].

    Και σκέφτηκα να ρωτήσω το εξής: Οταν ένα DataSet δεν το χρειάζομαι άλλο, πρέπει ή όχι να το κάνω dispose και να ελευθερώνω μνήμη ή δεν ελευθερώνω τίποτα.

    Ευχαριστώ.

     


    (thanad)
    Dimos K. Thanasoulas
    Athens
  •  21-09-2005, 00:01 5600 σε απάντηση της 5596

    Απ: Me.MyDataSet.Dispose()

    Λοιπόν, τα πράγματα δεν δουλεύουν ακριβώς έτσι... Το Dispose δεν ελευθερώνει μνήμη. Είναι απλά μία - κατά σύμβαση - μέθοδος στην οποία ο developer της κλάσης τοποθετεί cleanup κώδικα. Η "απελευθέρωση" της μνήμης θα γίνει μόνο όταν θα τρέξει ο Garbage Collector και πέραν από το να κάνεις GC.Collect (και κατόπιν να καείς στο πυρ το εξώτερον που λέει και ο Παναγιώτης) δεν υπάρχει άλλος τρόπος να ανακτήσεις την μνήμη που καταλαμβάνουν τα άχρηστα managed objects.

    Για την ακρίβεια, όσο και να καλείς την dispose του Dataset, δεν γίνεται τίποτα! Δοκίμασε να φτιάξεις ένα dataset, να καλέσεις την dispose και κατόπιν να κάνεις bind πάνω σε αυτό το Dataset ένα grid.

    O λόγος που υπάρχει η Dispose στο Dataset είναι ότι αυτή η κλάση κληρονομεί την System.ComponentModel.MarshalByValueComponent προκειμένου να υφίσταται και ως component που μπορεί να τοποθετηθεί πάνω στις φόρμες μας, δηλαδή σε κάποιον container. Ένας container, για κάθε component που τοποθετούμε πάνω του, φτιάχνει ένα site. H Dispose του Dataset δεν κάνει override την Dispose του MarshalByValueCompenent , όπερ σημαίνει ότι καλούμε τελικά αυτήν η οποία απλά ασχολείται με διαδικασίες τακτοποίησης και cleanup (ελέγχει ποιά sites είναι valid ή όχι και κάνει remove το instance του component από αυτά) του component κατά το design time.


    Vir prudens non contra ventum mingit
  •  21-09-2005, 22:06 5632 σε απάντηση της 5596

    Απ: Me.MyDataSet.Dispose()

    O.K, να το θέσω λίγο διαφορετικά.
    Αν γενικότερα, όταν έχω κάποια αντικείμενα που δεν τα χρειάζομαι πια, πρέπει να τα κάνω dispose και όταν κάνει την γύρα του ο GC να τα μαζέψει ή να τα κάνω dispose και να καλώ τον GC δυναμικά και να τα τρώει.

    Σημειωτέον πως με ενδιαφέρει να έχω περισσότερα resourses ελεύθερα στον WebServer.

    Thanks
    (thanad)
    Dimos K. Thanasoulas
    Athens
  •  22-09-2005, 00:22 5633 σε απάντηση της 5632

    Απ: Me.MyDataSet.Dispose()

    μπορείς να κοιτάξεις αυτό το thread http://www.dotnetzone.gr/cs/forums/3155/ShowPost.aspx όπου έχει γίνει μία ανάλογη κουβέντα. Πιστεύω να σου φανεί χρήσιμο.

    Φιλικά Αντρέας.

Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems