» Poradna » Programy

Odstranovani z pameti v c#

 |   |   |  [213.226.210.---]

delam si takovou vecicku pro smartphone v c#. zacinam s tim, ale neni mi jedna vec.
jestli to chapu dobre tak narozdil od c++ se z pameti odstanujou objekty v c# samy garbage collectorem. takze kdyz udelam tohle:

Trida a=new Trida();
Trida b=new Trida();
a=b;

tak by se melo to co bylo v a z pameti odstranit ne? me se ale deje to, ze se postupne v tom smartphonu zaplacava pamet, i kdyz by nemela. zajimavy je, ze treba nekdy se to nezvetsuje a pak zas chvili jo, jako kdyby ten collector pracoval nejak podivne. daji se take v c# definovat destruktory a odstranovani pameti si ridit sam (preci jen ma smartphone jen 10MB pameti, takze si nemuzu dovolit plytvat)? omlouvam se za dotaz ale v c# zacinam

Odpovědi na otázku

 |   |   |  [85.135.140.---]

no a=b ti spravi to,ze nastavi ukazovatele na to iste miesto v pamati, neskopiruje a do b,ako by sa zdalo. Treba si spravit kopirovaciu funkciu,alebo pouzit nejaku metodu pokial robis v .Net. Na konci pre istotu daj delete a; ked to skopirujes (alebo del a; uz prense neviem.) Snad som ti pomohol,aj ked som sa niekde mohol seknut,lebo uz som dlho neprogramoval...

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |   |  [195.46.70.---]

nerobim v c#, ale poviem ti ako to funguje v jave, co tipujem ze je podobne...
ako si spravne predpokladal v tvojom priklade, po priradeni a = b, by sa mala povodna instancia z pamate odstranit.
ale nerobi sa to automaticky v tom momente.... pokial virtualna masina usudi, ze jej dochadza pamat/alebo sa pripadne
prilis nudi,vtedy spusta GC. Mozno sa pocas behu tvojej aplikacie nespusti ani raz... takze preto sa ti moze zdat praca
gc divna, ona aj je, je za tym velka magia... ;)
pouzivanie destruktorov a odstranovanie instancii z pamati vo vlastnej rezii je krokom spat. programator
sa ma sustredit na to aby jeho program robil to na co je urceny, a veci ktore sa daju automatizovaat nech necha na VM..
su vsak aj specialne pripady ked sa o dealokovanie roznych nativnych resourcoch musi postarat programator, kde to zanho VM nevie
urobit.

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |   |  [213.226.210.---]

dik za odpoved. cetl jsem, ze se da garbage collector volat manualne, takze ho asi vzdycky kdyz bude treba zavolam. jeste jednou dik

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |   |  [212.5.214.---]

len si daj pozor na to, ze ak budes casto volar garbage collector, tak to bude mat vplyv na vykon aplikacie. Caste volanie GC.Collect() ktorym manualne volas cistenie pamate zatazuje system.

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |   |  [213.226.210.---]

tak to si asi budu muset dat fakt bacha, pac smartphone moc vykonu nepobral :)

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |   |  [212.5.214.---]

ja by som sa spolahol na garbage collector. Ak bude systemu chybat pamat, mal by sa postarat o jej vycistenie. Ja som GC.Collect() volal len v pripadoch ked som pracoval s COM a tahal som cez to Word a Excel. Vtedy som to volal pre okamzite uvolnenie, lebo tie objekty tam zaberali naozaj dost miesta.

Souhlasím  |  Nesouhlasím  |  Odpovědět

Související témata: Garbage



Určitě si přečtěte


Aktuální číslo časopisu Computer

Test 6 odolných telefonů a 22 powerbank

Srovnání technologií QLED a OLED

Měřte své sportovní výkony

Sady pro chytrou domácnost