Pamět GC   zodpovězená otázka

Visual Studio, Architektura

Vytvořil jsem několik aplikaci a všechny se vyznačují zvláštním průběhem konzumace paměti.

Spustím ji a začnu s ní pracovat, potom se začnou jeji paměťové nároky zvyšovat cca 30 Mb (zjištuji přes task managera). A pokud ji nechám aktivní tak si stále alokuje oněch 30 mb. Jakmile ji zminimalizuji, tak její nároky spadnou na cca 1 mb. Pokud ji posléze obnovím, tak se její pam. nároky zastaví na cca 8 mb.

Nebo jiná aplikace, která upravuje spoustu obrázku si postupně alokuje paměť až např. 150 mb. Ale opět po minimalizaci/obnově to spadne na cca 2 mb.

Jsou normální takové skoky v paměťové alokaci - průvodní jev GC?

Samozřejmě si dávám pozor abych při práci s obrázky používal dispoze. Ono je těch obrázku cca stovky a bez dispoze bych asi za chvíli neměl resources.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Záleží jak pracujete s různými objekty a jaké máte celkové využití systémové paměti. V 99% případů nemá smysl se podrobně zabývat alokací a dealokací paměti .NET aplikací, paměťová správa je zde velmi dobře udělaná a není důvod zbytečně šetřit pamětí pokud je k dispozici. Ve vyjímečných případech lze Garbage Collector popohnat k uvolnění paměti pomocí GC.Collect(), ale nedoporučuje se to.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Je pravda, že když pamět přesáhla 150 mb, tak jsem zaznamenal i nějaké to uvolnování (asi .net usoudil, že bude nějaké prostředky potřebovat). Obecně mi to nevadí, jen jsem měl strach, jestli toto chování nesvědčí o nějaké chybě v kódu.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Kód může být samozřejmě napsán prasácky nebo nevědomě tak, že se paměť neuvolňuje. To ale nemohu posoudit když ten kód nemám k dispozici. Typický scénář neuvolňování paměti je používání globálních proměnných, statických proměnných, nepoužívání konstrukce Using...End Using, nebo nesprávné použití Windows API (zapomenutí na ruční dealokaci paměti pomocí příslušné API funkce).

Na sledování využití paměti .NET aplikace existují různé nástroje (Visual Studio 2008 Team System Team Suite Profiler, ANTS Profiler, nebo obyčejné Performance Counters (Čítače výkonu) z Windows).

nahlásit spamnahlásit spam 0 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback