» »

[c#] garbage collector

[c#] garbage collector

RiNC ::

Imam en problem ki ga ne znam rešit (niti s pomočjo Googla)!
Del problematične kode je takšen:

private int stRezin;
private ushort [ , , ] MatrikaV;

private void openFileDialog1_FileOk(object sender, System.ComponentModel.CancelEventArgs e)
{
string[] files = openFileDialog1.FileNames;
Array.Sort(files);
this.stRezin = files.Length;
this.MatrikaV = new ushort[512,512,stRezin];

...
}

Ponavadi se naloži 200 do 250 datotek, kar pomeni matriko[512,512,250].
Tole mi pobere približno 120MB pomnilnika. In ko se "funkcija" ponovno kliče imam že 240MB, 360MB, ... zasedenega pomnilnika!

Problem pa je, da ko se naloži novi sklop datotek, starih podatkov ne potrebujem več...
Ker C# ne pozna besede delete, bi mogo nekako garbage collector prisilit da tole malo pobriše.

Ima kdo kaj izkušenj s tem?
CURIOSITY did not kill the cat...
...it was the BUS!

Gundolf ::

Meni pa google pravi: System.GC.Collect();.

RiNC ::

Ja tudi meni se je zdelo logično uporabit: System.GC.Collect();
Samo meni to NE DELA! :\

A se da mogoče kako eksplicitno določit kaj se naj pobriše?
Jaz res nisem našel nič uporabnega, zato pa sem tukaj vprašal če ima že kdo izkušnje s tem!?
CURIOSITY did not kill the cat...
...it was the BUS!

destiny ::

A si probal matriko postavt na Nothing in pol poklicat GC?

Sodeč po tem članku GC ne pobere smeti dokler jih ne releasaš na Nothing.

frudi ::

GC ne bo počistil objektov, na katere še kažejo kake reference. jaz bi tukaj iskal vzrok...
preden narediš nov array, ali še boljše, ko starega več ne rabiš, počisti vse reference, ki kažejo nanj in pokliči GC.
1ACDoHVj3wn7N4EMpGVU4YGLR9HTfkNhTd... in case I've written something useful :)

Gundolf ::

> Ja tudi meni se je zdelo logično uporabit: System.GC.Collect();
> Samo meni to NE DELA! :\

Potem pa prej tako povej, ne pa da izgleda da iščeš collect funkcijo. Kot so ti že drugi rekli, če collect ne prime, potem ti nekaj še drži tele objekte.

noraguta ::

nulleri matriko na konc prublema pol jo bo pob risal , niti set ni treba matrat z gc.collect.
al pa mal lepš določ scope spremenljivke , kar je lepša rešitev .
Pust' ot pobyedy k pobyedye vyedyot!

RiNC ::

> GC ne bo počistil objektov, na katere še kažejo kake reference. jaz bi tukaj iskal vzrok...
> preden narediš nov array, ali še boljše, ko starega več ne rabiš, počisti vse reference, ki kažejo nanj in pokliči GC.

...res je bil vzrok ta, da so še neke reference kazale na to matriko.
Zaradi tega funkcija GC.Collect() ni "primla", čeprav sem naredil že novo polje z new.

Sem zadevo zdaj rešil!
Malo je bilo krivo tudi to, da je že kak mesec od tega, ko sem tole delal,
pa še kode je že kr precej, tako da se že malo zgubljam.

Hvala vsem! :D
CURIOSITY did not kill the cat...
...it was the BUS!

CWIZO ::

Klicanje GC.Collect() je jako grda in nepriporocljiva praksa!!!
hancic.info
I can't uninstall it, there seems to be some kind of "Uninstall Shield"...

RiNC ::

Zakaj? Predlagaš kaj drugega?
Ali pa naj raje furam program ki po pol ure delovanja žere že 1GB pomnilnika?!? :\
CURIOSITY did not kill the cat...
...it was the BUS!

CWIZO ::

Programiraj tako kot je treba, pa bo GC sam skrbel, da bo pomnilnik zaoptimizeran in navoljo za druge stvari.
S klicom na GC.Collect bos namrec upocasnil racunalnik (vsaj na zacetku). Verjemi ej GC sam bolj pameten kot ti, tak da mu ni treba govort kdaj nej gre po smeti.

Sam ce pa ne znas programerat in ne znas dolocat scopa spremenljivkam, pol je pa logicno da tvoj program zre enormne vsote rama.
hancic.info
I can't uninstall it, there seems to be some kind of "Uninstall Shield"...

BCSman ::

no zdaj ste rešili in bi jaz vprašal nekaj zelo enostavnega, da ne bom odpiral nove teme:
kako se odpre nova forma?
MyForm Form = new MyForm();
Form.Show();

tole ne vem zakaj ne deluje, pa MyForm.cs imam že ustvarjeno. napiše "the type or namespace MyForm could not be found"

CWIZO ::

Sej ti error pove kaj je narobe.
Al sploh nimaš reference na assembly v katerem je MyForm, ali pa je MyForm v drugem namespacu ti pa nimaš tega nejmspace importanga (using Namesapce.Trala.Hopsasa)
hancic.info
I can't uninstall it, there seems to be some kind of "Uninstall Shield"...

darkolord ::

Al pa MyForm sploh ni ime namespaca

BCSman ::

ja MyForm ni bila v isti mapi kot osnovna forma. sem jo samo preložil in dela.


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

C# težava

Oddelek: Programiranje
233493 (2339) mladec
»

Avtomatično polnjenje forme

Oddelek: Programiranje
5775 (617) win64
»

Visual basic sodelovanje

Oddelek: Programiranje
102545 (2185) Ericssony
»

auto submit forum

Oddelek: Izdelava spletišč
5992 (939) Road Runner
»

VB.net MDI in formi splošno

Oddelek: Programiranje
91498 (1441) strel

Več podobnih tem