Συνιστάται, 2024

Επιλογή Συντάκτη

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Βασικές διαφορές Μεταξύ της διάθεσης () και της οριστικοποίησης ()

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

Συμπέρασμα:

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

Top