Διαφορά μεταξύ διάθεσης () και οριστικοποίησης () στο C #

Συγγραφέας: Laura McKinney
Ημερομηνία Δημιουργίας: 2 Απρίλιος 2021
Ημερομηνία Ενημέρωσης: 13 Ενδέχεται 2024
Anonim
Διαφορά μεταξύ διάθεσης () και οριστικοποίησης () στο C # - Τεχνολογία
Διαφορά μεταξύ διάθεσης () και οριστικοποίησης () στο C # - Τεχνολογία

Περιεχόμενο


Οι μέθοδοι dispose () και finalize () είναι οι μέθοδοι του C # οι οποίες χρησιμοποιούνται για να απελευθερώσουν τους μη διαχειριζόμενους πόρους που κατέχει ένα αντικείμενο. Η μέθοδος dispose () ορίζεται μέσα στην διεπαφή IDisposable ενώ η μέθοδος finalize () ορίζεται στο εσωτερικό του αντικειμένου κλάσης. Η κύρια διαφορά μεταξύ dispose () και finalize () είναι ότι η μέθοδος διαθέτω() πρέπει να επικαλείται ρητά από τον χρήστη, ενώ η μέθοδος Οριστικοποιώ() επικαλείται ο συλλέκτης σκουπιδιών, λίγο πριν καταστραφεί το αντικείμενο. Ας μελετήσουμε κάποιες άλλες διαφορές μεταξύ τους με τη βοήθεια ενός πίνακα σύγκρισης που φαίνεται παρακάτω.

  1. Συγκριτικό διάγραμμα
  2. Ορισμός
  3. Βασικές διαφορές
  4. συμπέρασμα

Συγκριτικό διάγραμμα

Βάση σύγκρισης()Οριστικοποιώ( )
ΟρίζεταιΗ μέθοδος dispose () ορίζεται στη διασύνδεση ID interface που χρησιμοποιείται.Η μέθοδος οριστικοποιεί () id που ορίζεται στην κλάση java.lang.object.
Σύνταξηδημόσιο κενό Dispose () {
// Απόρριψη κώδικα εδώ
}
προστατευμένο κενό ολοκληρώνει () {
// κωδικοποίηση οριστικοποίησης εδώ
}
Επίκληση Η μέθοδος dispose () χρησιμοποιείται από το χρήστη.Η μέθοδος finalize () καλείται από τον συλλέκτη σκουπιδιών.
ΣκοπόςΗ μέθοδος dispose () χρησιμοποιείται για την απελευθέρωση των μη διαχειριζόμενων πόρων κάθε φορά που γίνεται επίκληση.Η οριστική μέθοδος () χρησιμοποιείται για την απελευθέρωση μη διαχειριζόμενων πόρων πριν καταστραφεί το αντικείμενο.
ΕκτέλεσηΗ μέθοδος dispose () πρέπει να εφαρμοστεί κάθε φορά που υπάρχει μια μέθοδος close ().Η μέθοδος finalize () πρέπει να εφαρμοστεί για μη διαχειριζόμενους πόρους.
Προσδιορισμός πρόσβασηςΗ μέθοδος dispose () δηλώνεται ως δημόσια.Η οριστική μέθοδος () δηλώνεται ως ιδιωτική.
Δράση Η μέθοδος dispose () είναι ταχύτερη και διαθέτει άμεσα ένα αντικείμενο.Η ολοκλήρωση της μεθόδου είναι πιο αργή σε σύγκριση με τη διάθεση
ΕκτέλεσηΗ μέθοδος διαθέτει () εκτελεί την άμεση ενέργεια ως εκ τούτου, δεν επηρεάζει την απόδοση των ιστότοπων. Η οριστικοποίηση () της μεθόδου επηρεάζει βραδύτερα την απόδοση των ιστότοπων.


Ορισμός της διάθεσης ()

Η μέθοδος dispose () απελευθερώνει τους μη διαχειριζόμενους πόρους που κατέχονται από ένα αντικείμενο της κλάσης. Οι μη διαχειριζόμενοι πόροι είναι αρχεία, συνδέσεις δεδομένων κλπ. Η μέθοδος dispose () δηλώνεται στη διεπαφή Είναι αναγνωρίσιμο και εφαρμόζεται από την τάξη με την υλοποίηση της ID διεπαφής. Αυτή η μέθοδος δεν καλείται αυτόματα. Ο προγραμματιστής πρέπει να το εφαρμόσει με το χέρι όταν δημιουργείτε μια προσαρμοσμένη κλάση που θα χρησιμοποιηθεί από άλλους. Η μέθοδος έχει την ακόλουθη σύνταξη:

δημόσιο κενό διαθέσιμο () {// Απόρριψη κώδικα εδώ}

Στην παραπάνω σύνταξη, μπορείτε να παρατηρήσετε ότι η μέθοδος δηλώνεται ως δημόσια. Είναι επειδή αυτή η μέθοδος ορίζεται στην διεπαφή IDisposable και πρέπει να εφαρμοστεί από την κλάση που υλοποιεί αυτή τη διεπαφή. Έτσι, για να παρέχεται πρόσβαση στην τάξη υλοποίησης, η μέθοδος δηλώνεται ως δημόσια.

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


Ορισμός της οριστικοποίησης ()

Η μέθοδος finalize () ορίζεται στο αντικείμενο τάξη. Χρησιμοποιείται για δραστηριότητες καθαρισμού. Αυτή η μέθοδος ονομάζεται από τον συλλέκτη σκουπιδιών όταν η αναφορά ενός αντικειμένου δεν χρησιμοποιείται για μεγάλο χρονικό διάστημα. Ο συλλέκτης απορριμμάτων ελευθερώνει αυτόματα τους διαχειριζόμενους πόρους, αλλά αν θέλετε να απελευθερώσετε τους μη διαχειριζόμενους πόρους, όπως τη διαχείριση αρχείων, τη σύνδεση δεδομένων κ.λπ., η μέθοδος οριστικοποίησης πρέπει να εφαρμοστεί χειροκίνητα. Ο συλλέκτης απορριμμάτων επικαλείται τη μέθοδο να οριστικοποιήσει () λίγο πριν καταστρέψει τελείως το αντικείμενο.

Η σύνταξη της μεθόδου ολοκληρώνεται ():

προστατευμένο κενό οριστικοποίηση () {// κωδικός οριστικοποίησης εδώ}

Στη σύνταξη παραπάνω, η μέθοδος finalize () δηλώνεται ως προστατευμένη. Ο λόγος πίσω από αυτό είναι ότι η μέθοδος οριστικοποίησης () δεν πρέπει να είναι προσπελάσιμη από έξω από την τάξη και πρέπει να είναι προσβάσιμη μόνο στον συλλέκτη σκουπιδιών.

Η μέθοδος finalize () επηρεάζει το κόστος της απόδοσης καθώς δεν απελευθερώνει τη μνήμη αμέσως. Στο C # η μέθοδος finalize ονομάζεται αυτόματα με destructors.

  1. Η μέθοδος dispose () ορίζεται σε μια διεπαφή Μπορεί να χρησιμοποιηθεί. Από την άλλη πλευρά, η οριστική μέθοδος () ορίζεται στην κλάση αντικείμενο.
  2. Η μέθοδος dispose () πρέπει να χρησιμοποιηθεί χειροκίνητα μέσα από τον κώδικα από έναν προγραμματιστή, ενώ η ολοκλήρωση της μεθόδου ενεργοποιείται αυτόματα από τον συλλέκτη σκουπιδιών πριν καταστρέψει το αντικείμενο.
  3. Η απόρριψη της μεθόδου μπορεί να χρησιμοποιηθεί οποτεδήποτε, ενώ η ολοκλήρωση της μεθόδου καλείται από τον συλλέκτη σκουπιδιών όταν διαπιστώσει ότι το αντικείμενο αυτό δεν έχει παραπεμφθεί για μεγάλο χρονικό διάστημα.
  4. Η μέθοδος dispose () υλοποιείται σε μια κλάση μετά την υλοποίηση της ID διεπαφής. Η οριστικοποίηση της μεθόδου () πρέπει να εφαρμοστεί μόνο για μη διαχειριζόμενους πόρους επειδή οι διαχειρισμένοι πόροι απελευθερώνονται αυτόματα από τον συλλέκτη απορριμμάτων.
  5. Ο προσδιοριστής πρόσβασης της μεθόδου dispose () είναι δημόσιος, όπως ορίζεται στη διεπαφή IDisposable και θα εφαρμοστεί από την κλάση που υλοποιεί αυτή τη διεπαφή, ως εκ τούτου θα πρέπει να είναι δημόσια. Από την άλλη πλευρά, η μέθοδος finalize () έχει προστατευμένο προσδιοριστή πρόσβασης, ώστε να μην είναι προσβάσιμο σε κανένα μέλος εκτός της κλάσης.
  6. Η μέθοδος dispose () είναι γρήγορη και απελευθερώνει το αντικείμενο αμέσως, συνεπώς, δεν επηρεάζει το κόστος απόδοσης. Η μέθοδος finalize () είναι πιο αργή και δεν απελευθερώνει τους πόρους που κατέχει άμεσα το αντικείμενο.

Συμπέρασμα:

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