Nem felügyelt erőforrások tisztítása

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. Ha az objektumra (és az általa használt erőforrásokra) már nincs szükség, az Ön típusú felhasználó hívja meg a hívásokat Dispose . A Dispose metódus azonnal felszabadítja a nem felügyelt erőforrásokat.

  • Abban az esetben, ha egy ön típusú fogyasztó elfelejt hívást kezdeményezni 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. Széf leírók az System.Runtime.InteropServices.SafeHandle absztrakt osztályból származnak, és robusztus Finalize módszert tartalmaznak. Ha biztonságos fogópontot használ, egyszerűen implementálja az IDisposable interfészt, és meghívja a biztonságos fogópont metódusát Dispose a IDisposable.Dispose megvalósítás során. A biztonságos fogópont véglegesítőjét a szemétgyűjtő automatikusan meghívja, ha a Dispose metódust nem hívják meg.

      vagy

    • Véglegesítő definiálása. A véglegesítés lehetővé teszi a nem determinisztikus erőforrások nem determinisztikus kiadását, ha egy típusú fogyasztó nem hívja IDisposable.Dispose meg, hogy determinisztikus módon dobja el őket.

      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 leírót.

A típus felhasználói ezután közvetlenül meghívhatják az implementációt, IDisposable.Dispose hogy felszabadítsa a nem felügyelt erőforrások által használt memóriát. Ha megfelelően implementál egy metódust Dispose , a biztonságos leíró metódusa Finalize vagy a Object.Finalize metódus saját felülbírálása védelmet nyújt az erőforrások eltávolításához abban az esetben, ha a Dispose metódust nem hívják meg.

A szakasz tartalma

Az Elidegenítési módszer implementálása azt ismerteti, hogyan implementálható a nem felügyelt erőforrások felszabadítására szolgáló ártalmatlanítási minta.

A megvalósító IDisposable objektumok használata leírja, hogyan biztosítják egy adott típusú felhasználó a megvalósítás meghívását Dispose . Ehhez erősen javasoljuk a C# using (vagy a Visual Basic Using) utasítás használatát.

Referencia

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 Objektum véglegesítését biztosítja, ha a metódus nem oldja fel a Dispose nem felügyelt erőforrásokat.
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.