No, článek na toto téma by se sem určitě hodil, nic pořádného o tom nemáme, jestli budu mít čas, tak ho napíšu. Abyste měl klidnější spaní, zkusím popsat úplné základy v jednom odstavečku už teď. O drtivou většinu věcí se stará Garbage collector, vy nemusíte většinou řešit vůbec nic. Pokud pracujete se soubory (StreamReader, StreamWriter) nebo s databázemi (SqlConnection), používejte blok using. Ten na těchto objektech automaticky zavolá Dispose, a to i v případě, že z using bloku jakkoliv vyskočíte (výjimka chycená mimo blok, goto, return atd.). Finalize je specialita VB.NET, jedná se o metodu, která se automaticky volá při zániku objektu (destruktor). Volat zvnějšku byste ji nikdy neměl, ony se v .NETu destruktory obecně moc nepoužívají, protože se volají bůhví kdy (až když se objekt ruší, což ale dělá GC a nedá se to moc ovlivnit). Místo nich je právě IDisposable, které umožňuje volat metodu Dispose v okamžiku, kdy přestáváte s objektem pracovat. Co se týče paměti, GC si ji uvolňuje sám, když ji potřebuje, a moc si do toho kecat nenechá (můžete ho o to požádat zavoláním GC.Collect, ale tuhle metodu potřebují lidé pouze ve speciálních případech a nebo v případě, že píší jako prasata). Většinou platí, že se o to nemusíte starat. Jediné, kdy se o paměť starat musíte, jsou případy, kdy používáte COM objekty - ty musíte většinou uvolňovat explicitně. Většině lidí se ze začátku nelíbí, že do .NETu nevidí - když píšete v C++, tak tam se naalokuje přesně tolik paměti, kolik chcete, a všechno si děláte sám a máte nad tím 100% kontrolu (což je v mnoha případech na škodu, protože to nemusíte vždy uhlídat). .NET si naalokuje daleko víc paměti, nechává si rezervu, a když mu paměť dojde, zavolá GC atd, prostě se o to stará sám. Mě to také ze začátku trochu vadilo (resp. ze začátku ne, ale až ve chvíli, kdy jsem do .NETu trochu víc proniknul, bál jsem se, jak je všechno pomalé). Ale jakmile jsem pořádně zjistil, jak to uvnitř funguje, tak už se bát přestávám.
|