Dobrý den, v .Net aplikacích nemusí dojít (a většinou ani nedochází) k uvolnění paměti ihned po zániku objektu. O čištění paměti se stará Garbage Collector, který se spouští jednou za čas (většinou když dostane od systému dotaz, zda by nebyl tak laskav a neuvolnil kousek paměti). Do té doby zůstávají objekty alokované v paměti (dokud je paměti dost, tak se nebude namáhat s úklidem). Můžete zkusit zavolat Garbage Collector manuálně a podívat se, zda se něco uvolnilo
System.GC.Collect()
Má to však tři úskalí: Za prvé čištění paměti má nemalou režii a pokud by jste GC spouštěl často, bude to mít nepříznivé důsledky na výkon aplikace. Za druhé, to že zavoláte tuto metodu ještě neznamená, že se ihned provede (vy GC jen požádáte zda by nebyl tak hodný aby až se mu bude chtít, provedl úklid) A konečně za třetí za svůj život se objekt může dostat do několika režimů. Podle toho v jakém režimu je, tak s ním GC zacházi. Zjednodušeně řečeno pokud je objekt na "nejnižším levelu" GC ho smaže při nejbližší příležitosti. Pokud se objekt dostane do "nejvyššího levelu" GC usoudí že bez něj nejde žít a objekt se uvolní až s ukončením aplikace. Toto je hodně zjednodušené a omlouvám se za nepřesnou terminologii. Ale funkce GC je poměrně komplikovaná a obecně si .NET framework moc nenechá kecat do toho, jak má hospodařit s pamětí.
|