Poznámka
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
U většiny objektů, které vaše aplikace vytvoří, se můžete při správě paměti spolehnout na správce paměti .NET. Pokud ale vytváříte objekty, které obsahují nespravované prostředky, musíte tyto prostředky explicitně uvolnit, jakmile je budete používat. Nejběžnější typy nespravovaných prostředků jsou objekty, které zabalují prostředky operačního systému, jako jsou soubory, okna, síťová připojení nebo databázová připojení. Přestože systém uvolňování paměti dokáže sledovat životnost objektu, který zapouzdřuje nespravovaný prostředek, neví, jak uvolnit a vyčistit nespravovaný prostředek.
Pokud vaše typy používají nespravované prostředky, měli byste udělat toto:
Implementujte vzor dispose. To vyžaduje, abyste zadali IDisposable.Dispose implementaci pro umožnění deterministického uvolnění nespravovaných prostředků. Spotřebitel vašeho typu volá Dispose, když objekt (a prostředky, které používá) už nejsou potřeba. Metoda Dispose okamžitě uvolní nespravované prostředky.
Pokud uživatel vašeho typu zapomene zavolat Dispose, poskytněte způsob, jak uvolnit nespravované zdroje. Můžete to udělat dvěma způsoby:
Pomocí bezpečného popisovače zabalte nespravovaný prostředek. Toto je doporučená technika. Bezpečné držáky jsou odvozeny z System.Runtime.InteropServices.SafeHandle abstraktní třídy a zahrnují robustní Finalize metodu. Při použití bezpečného popisovače jednoduše implementujete rozhraní IDisposable a zavoláte metodu svého bezpečného popisovače Dispose v implementaci IDisposable.Dispose. Finalizační metoda bezpečného popisovače je volána automaticky správcem paměti, pokud není volána jeho metoda Dispose.
— nebo —
Definujte finalizační metodu. Finalizace umožňuje nedeterministické uvolnění nespravovaných prostředků, když spotřebitel typu nezavolá IDisposable.Dispose k jejich deterministickému uvolnění.
Výstraha
Finalizace objektů může být složitá a náchylná k chybám, proto doporučujeme místo poskytnutí vlastního finalizátoru použít bezpečný popisovač.
Uživatelé vašeho typu mohou pak přímo volat vaši IDisposable.Dispose implementaci k uvolnění paměti využívané nespravovanými prostředky. Při správné implementaci Dispose metody se buď metoda popisovače bezpečného Finalize nebo vaše vlastní přepsání Object.Finalize metody stane ochranou pro vyčištění prostředků v případě, že Dispose metoda není volána.
V této části
Implementace metody Dispose popisuje, jak implementovat model Dispose pro uvolnění nespravovaných prostředků.
Použití objektů, které implementují IDisposable
popisuje, jak uživatelé typu zajišťují, že je volána jeho Dispose implementace. K tomu důrazně doporučujeme použít příkaz jazyka C# using
(nebo Visual Basic Using
).
Odkazy
Typ nebo člen | Popis |
---|---|
System.IDisposable | Definuje metodu Dispose pro uvolnění nespravovaných prostředků. |
Object.Finalize | Poskytuje pro dokončení objektu, pokud nespravované prostředky nejsou uvolněny metodou Dispose . |
GC.SuppressFinalize | Potlačí dokončení. Tato metoda se obvykle volá z Dispose metody, aby se zabránilo spuštění finalizátoru. |