Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Az alkalmazás által létrehozott objektumok többségénél a .NET-szemétgyűjtőre támaszkodhat a memóriakezelés kezeléséhez. Ha azonban nem felügyelt erőforrásokat tartalmazó objektumokat hoz létre, a használatuk befejezésekor explicit módon fel kell szabadítania ezeket az erőforrásokat. A nem felügyelt erőforrások leggyakoribb típusai az operációs rendszer erőforrásait, például fájlokat, ablakokat, hálózati kapcsolatokat vagy adatbázis-kapcsolatokat burkoló objektumok. Bár a szemétgyűjtő képes nyomon követni egy nem felügyelt erőforrást tartalmazó objektum élettartamát, nem tudja, hogyan szabadíthatja fel és tisztíthatja meg a nem felügyelt erőforrást.
Ha a típusok nem felügyelt erőforrásokat használnak, tegye a következőket:
Implementálja a megsemmisítési mintát. Ehhez olyan implementációt IDisposable.Dispose kell biztosítania, amely lehetővé teszi a nem felügyelt erőforrások determinisztikus kiadását. Az Ön típusú fogyasztó a Dispose hívását akkor kezdeményezi, amikor az objektumra (és az általa használt erőforrásokra) már nincs szükség. A Dispose metódus azonnal felszabadítja a nem felügyelt erőforrásokat.
Abban az esetben, ha az ön típusú fogyasztó elfelejti hívni Dispose, adjon módot a nem felügyelt erőforrások felszabadítására. Ezt kétféleképpen teheti meg:
Használjon biztonságos fogópontot a nem felügyelt erőforrás burkolásához. Ez az ajánlott technika. A biztonságos fogópontok az System.Runtime.InteropServices.SafeHandle absztrakt osztályból származnak, és robusztus Finalize módszert tartalmaznak. Ha biztonságos fogópontot használ, először implementálja az IDisposable interfészt, majd hívja meg a biztonságos fogópont Dispose metódusát a IDisposable.Dispose megvalósítása során. A biztonságos fogantyú véglegesítőjét a szemétgyűjtő automatikusan meghívja, ha a Dispose metódust nem hívják meg.
— vagy —
Definiáljon egy véglegesítőt. A véglegesítés lehetővé teszi a kezeltlen erőforrások nem determinisztikus felszabadítását, ha egy típus fogyasztója elmulasztja meghívni a IDisposable.Dispose-ot azok determinisztikus eldobásához.
Figyelmeztetés
Az objektum véglegesítése összetett és hibalehetőséget rejtő művelet lehet, ezért javasoljuk, hogy a saját véglegesítő helyett használjon biztonságos fogantyút.
Az Ön típusának felhasználói ezután a megvalósítás IDisposable.Dispose közvetlen hívásával felszabadíthatják a nem felügyelt erőforrások által használt memóriát. Ha helyesen implementál egy Dispose metódust, akkor a biztonságos fogantyú Finalize metódusa vagy a Object.Finalize metódus saját felülírása védelmet nyújt az erőforrások felszabadítására arra az esetre, ha a Dispose metódus nem kerül meghívásra.
Ebben a szakaszban
A Dispose metódus implementálása azt ismerteti, hogyan implementálható a nem kezelt erőforrások felszabadítására szolgáló Dispose minta.
Az IDisposable-t implementáló objektumok használata leírja, hogyan biztosítja egy típus fogyasztója, hogy annak Dispose megvalósítása meghívásra kerüljön. Ehhez erősen javasoljuk a C# using (vagy a Visual Basic Using) utasítás használatát.
Referenciák
| Típus/tag | Leírás |
|---|---|
| System.IDisposable | Meghatározza a Dispose nem felügyelt erőforrások kiadásának módját. |
| Object.Finalize | Ha a Dispose metódus nem oldja fel a nem felügyelt erőforrásokat, biztosítja az objektum véglegesítését. |
| GC.SuppressFinalize | Letiltja a véglegesítést. Ezt a metódust szokás egy metódusból Dispose meghívni, hogy megakadályozza a véglegesítő végrehajtását. |