A megsemmisítés () és a véglegesítés () közötti különbség C # -ben

Szerző: Laura McKinney
A Teremtés Dátuma: 2 Április 2021
Frissítés Dátuma: 13 Lehet 2024
Anonim
A megsemmisítés () és a véglegesítés () közötti különbség C # -ben - Technológia
A megsemmisítés () és a véglegesítés () közötti különbség C # -ben - Technológia

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.

  1. Összehasonlító táblázat
  2. Meghatározás
  3. Főbb különbségek
  4. Következtetés

Összehasonlító táblázat

Az összehasonlítás alapjaeldob( )véglegesítés ()
MeghatározottA 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.
Szintaxispublic 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éljaA 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ásA 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ényA 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.

  1. 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.
  2. 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.
  3. 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.
  4. 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.
  5. 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á.
  6. 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.