Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

memory leak ili nesto drugo?

[es] :: .NET :: memory leak ili nesto drugo?

[ Pregleda: 2398 | Odgovora: 3 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Bongo_zg
zagreb

Član broj: 114214
Poruke: 36
*.dynamic.amis.net.



Profil

icon memory leak ili nesto drugo?31.07.2007. u 17:33 - pre 203 meseci
dakle, imam jedan problem koji je toliko banalan da se pitam ;)

imam aplikaciju koja se vrti jedno vrijeme, te instancira odredjene objekte
unutar kojih se nalaze kolekcije (uglavnom dictionary). nakon sto se obavi
posao, objekt se zatvara.


no, problem je sto nakon 8 sati rada, memory consuption naraste do preko
1gb.
catch je u tome da se ne oslobadja memorija koju zauzmu navedeni
dictionariji.

kako to rijesiti?

da bi testirao problem, napravio sam jednostavnu aplikaciju koja pokazuje o
cemu se radi.
Code:

   Public Sub test()
        Dim D As New Class1

        For x As Int32 = 1 To 10000000
            Dim T As New Obekt2(x)
            D.D.Add(x, T)
        Next
        D.D.Clear()

        GC.Collect()
        GC.ReRegisterForFinalize(D)

        GC.Collect()
        D = Nothing
        GC.Collect()
    End Sub


Public Class Class1
    Public D As System.Collections.Generic.Dictionary(Of Int32, Objekt2)
    Public Sub New()
        D = New System.Collections.Generic.Dictionary(Of Int32, Objekt2)
    End Sub

    Protected Overrides Sub Finalize()
        MyBase.Finalize()
    End Sub
End Class


uglavnom, nakon sto se izvrsi navedeno (i isprazni memorija), zauzece ostaje
vece za nekih 250mb.

da li ja grijesim ili jednostavno .net (2005) ne cisti objekte do kraja?



[Shadowed: dodati [code] tagovi.]

[Ovu poruku je menjao Shadowed dana 01.08.2007. u 00:54 GMT+1]
Think Big!
 
Odgovor na temu

DarkMan
Darko Matesic

Član broj: 20445
Poruke: 572
77.46.227.*

Jabber: DarkMan


Profil

icon Re: memory leak ili nesto drugo?31.07.2007. u 19:36 - pre 203 meseci
Prepravio sam ovaj tvoj kod u C#, pokrenuo program ali nisam dobio tvoj problem.
Pre pokretanja zauzece u task manageru je oko 20MB, posle popunjavanja recnika oko 450MB, po oslobadjanju se vratilo na 20MB.

Code:

    static class Program
    {

        [STAThread]
        static void Main()
        {
            Console.WriteLine("Memory allocated before: " + AllocatedMem());

            Class1 D = new Class1();
            for(int i = 0; i < 10000000; i++) {
                D.D.Add(i, new Objekat(i));
            }
            Console.WriteLine("Memory allocated after: " + AllocatedMem());
            Console.WriteLine("Press enter to continue...");
            Console.ReadLine();

            D.D.Clear();

            GC.Collect();
            GC.ReRegisterForFinalize(D);

            GC.Collect();
            D = null;
            GC.Collect();

            Console.WriteLine("Memory allocated at end: " + AllocatedMem());
            Console.WriteLine("Press enter to continue...");
            Console.ReadLine();
        }

        public static string AllocatedMem()
        {
            float mb = GC.GetTotalMemory(false) / 1048576f;
            return "" + Math.Round(mb, 2) + " MB";
        }

    }
    public class Objekat    
    {
        public int i;
        public Objekat(int i)
        {
            this.i = i;
        }
    }

    public class Class1
    {
        public System.Collections.Generic.Dictionary<int, Objekat> D;

        public Class1()
        {
            D = new System.Collections.Generic.Dictionary<int, Objekat>();
        }
    }


Inace za oslobadjanje memorije kod mene je dovoljno samo sledece i dobije se isti rezultat.
Code:

            D = null;
            GC.Collect();
 
Odgovor na temu

Bongo_zg
zagreb

Član broj: 114214
Poruke: 36
*.dynamic.amis.net.



Profil

icon Re: memory leak ili nesto drugo?31.07.2007. u 20:14 - pre 203 meseci
ja pratim zauzece memorije preko task managera...

sada sam bio ponovno pokrenuo.
prije pocetka punjenja: 1.2gb
nakon punjenja: 1.97gb
nakon praznjenja: 1.57


da li je task manager adekvatan za ovako sta?
Think Big!
 
Odgovor na temu

dusty
Predrag Glumac
Zemun, Srbija

Član broj: 15383
Poruke: 549
*.ptt.yu.

Sajt: www.mika.rs


+6 Profil

icon Re: memory leak ili nesto drugo?01.08.2007. u 08:27 - pre 203 meseci
Ako nemas unmanaged objekte ne moze da dodje do leak-a. Mislim da ti je problem u finalization queue-u GC-a. Probaj ovako - postavi referencu na null (tj. nothing za VB), pozovi GC.Collect a zatim WaitForPendingFinalizers i pogledaj sta se desava.
America national sport is called baseballs. It very similar to our sport, shurik, where we take dogs, shoot them in a field and then have a party.
 
Odgovor na temu

[es] :: .NET :: memory leak ili nesto drugo?

[ Pregleda: 2398 | Odgovora: 3 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.