A megsemmisítés () és a véglegesítés () közötti különbség C # -ben
Tartalom
A dispozíció () és a véglegesítés () módszerek a C # metódusai, amelyeket az objektum birtokában lévő, nem kezelt erőforrások felszabadítására hívnak fel. A dispose () metódust az IDzposable felületen határozzuk meg, míg a finalize () metódust az osztályobjektum határozza meg. A dispose () és finalize () közötti fő különbség az, hogy a módszer eldob() a felhasználónak kifejezetten hivatkoznia kell, míg a módszerre Lezárás () a hulladékgyűjtő hívja fel közvetlenül az objektum megsemmisítése előtt. Vizsgáljuk meg néhány különbséget közöttük az alább bemutatott összehasonlító táblázat segítségével.
- Összehasonlító táblázat
- Meghatározás
- Főbb különbségek
- Következtetés
Összehasonlító táblázat
Az összehasonlítás alapja | eldob( ) | véglegesítés () |
---|---|---|
Meghatározott | A dispose () metódust az interfész azonosítható interfész határozza meg. | A módszer véglegesíti () id azonosítóját a java.lang.object osztályban. |
Szintaxis | public void Dispose () { // Itt dobja el a kódot } | védett érvénytelenítés véglegesítése () { // véglegesítési kód itt } |
hivatkozni | A dispose () metódust a felhasználó hívja meg. | A hulladékgyűjtő meghívja a finalize () módszert. |
Célja | A dispose () metódust a nem kezelt erőforrások felszabadítására használják, amikor az meghívásra kerül. | A módszer a finalize () módszerrel menti a nem kezelt erőforrásokat az objektum megsemmisítése előtt. |
Végrehajtás | A dispose () metódust mindenkor be kell vezetni, ha van close () metódus. | A finalize () módszert nem kezelt erőforrásokra kell bevezetni. |
Hozzáférés-meghatározó | A dispose () metódust nyilvánosnak nyilvánítják. | A finalize () metódust privátnak nyilvánítják. |
Akció | A dispose () módszer gyorsabb, és azonnal elidegeníti az objektumot. | A módszer véglegesítése lassabb az ártalmatlanításhoz képest |
Teljesítmény | A módszer disposed () végrehajtja az azonnali műveletet, tehát nem befolyásolja a webhelyek teljesítményét. | A módszer véglegesítése () lassabban befolyásolja a webhelyek teljesítményét. |
A rendelkezés meghatározása ()
A dispose () metódus felszabadítja azokat a nem kezelt erőforrásokat, amelyeket az osztály tárgya tart. A nem kezelt erőforrások fájlok, adatkapcsolatok stb. A dispose () metódust az interfész deklarálja IDisposeable és az osztály hajtja végre az azonosítható felület megvalósításával. Ezt a módszert nem hívják automatikusan. A programozónak manuálisan kell végrehajtania, amikor egyéni osztályt hoz létre, amelyet mások fognak használni. A módszer a következő szintaxissal rendelkezik:
public void dispose () {// a rendelkezésére áll kód itt}
A fenti szintaxisban megfigyelheti, hogy a metódus nyilvánosnak nyilvánul. Ennek oka az, hogy ezt a módszert az azonosítható felület határozza meg, és azt az osztályt kell végrehajtani, amely ezt a felületet megvalósítja. Tehát a megvalósító osztály elérhetőségének biztosítása érdekében a módszert nyilvánosnak nyilvánítják.
Ezt a módszert manuálisan hívja meg a program kódja, ahogy az megvalósításra került. A metódusok végrehajtása gyors, és azonnal felszabadítja az osztály tárgya által birtokolt erőforrásokat.
A véglegesítés meghatározása ()
A véglegesítés () módszert a tárgy osztály. Tisztítási tevékenységekhez használják. Ezt a módszert a hulladékgyűjtő hívja meg, ha egy objektum referenciáját hosszú ideig nem használják. A hulladékgyűjtő automatikusan felszabadítja a kezelt erőforrásokat, de ha meg akarja szabadítani a nem kezelt erőforrásokat, például fájlkezelőt, adatkapcsolatot stb., Akkor a véglegesítési módszert manuálisan kell végrehajtani. A hulladékgyűjtő közvetlenül a tárgy teljes megsemmisítése előtt hívja fel a módszert a finalize () módszerre.
A módszer szintaxisa véglegesíti ():
védett void finalize () {// véglegesítési kód itt}
A fenti szintaxisban a finalize () metódust védettnek nyilvánítják. Ennek oka az, hogy a finalize () módszer nem érhető el az osztályon kívülről, és csak a hulladékgyűjtő számára elérhető.
A véglegesítés () módszer befolyásolja a teljesítmény költségét, mivel nem szabadítja fel azonnal a memóriát. A C # esetében a véglegesítési módszert automatikusan meghívják a destruktúrákkal.
- A dispose () metódust egy interfész határozza meg IDisposable. Másrészt a módszer a véglegesítéshez () az osztályban van meghatározva tárgy.
- A dispose () metódust a programozónak manuálisan kell meghívnia a kódban, míg a hulladékgyűjtő automatikusan meghívja a módszer befejezését, mielőtt elpusztítja az objektumot.
- A ártalmatlanítási módszert bármikor meg lehet hívni, míg a végleges módszert a hulladékgyűjtő hívja fel, amikor úgy találja, hogy az objektumra nem volt hosszú ideje hivatkozva.
- A dispose () metódus egy osztályban valósul meg az azonosítható felület megvalósítása után. A finalize () módszert csak a következőkre kell végrehajtani: menedzsment erőforrások mert a kezelt erőforrásokat a hulladékgyűjtő automatikusan felszabadítja.
- A dispose () módszer hozzáférési specifikációja nyilvános, mivel azt az IDisposable interfész meghatározza, és azt az osztály végrehajtja, amely ezt a felületet megvalósítja, tehát nyilvánosnak kell lennie. Másrészt a metódus finalize () védett hozzáférési specifikátorral rendelkezik, így az osztályon kívüli tagok számára nem férhet hozzá.
- A dispose () módszer gyors és azonnal felszabadítja az objektumot, ennélfogva nem befolyásolja a teljesítmény költségeit. A finalize () módszer lassabb és nem szabadítja fel azonnal az objektum birtokában lévő erőforrásokat.
Következtetés:
Javasoljuk, hogy a dispose () metódust használja a finalize () metódus felett, mivel ez gyorsabb, mint a véglegesítés. Ezenkívül bármikor hívható, ha szükséges.