OutOfMemory při ukládání Bitmapy v cyklu

Odpovědět OutOfMemory při ukládání Bitmapy v cyklu

  • 16. června 2010 12:55
     
     

    Ahoj, mám problém s výjimkou OutOfMemory při práci s bitmapou. Vytvářím a ukládám obrázek 1280x1024. Pokud vytvořím jeden, nic se neděje, ale když jich v cyklu generuji třeba patnáct, tak to kolem desátého obrázku spadne na nedostatku paměti. Samozřejmě po každém uložení volám nad objektem bitmapy Dispose(). Je vůbec možné generovat takhle velké obrázky aniž bych na paměti vždy vyhořel?

     

    Tom

Všechny reakce

  • 18. června 2010 13:45
     
     

    Jak ten obrázek vytváříte? Malujete v něm něco pomocí GDI+? Zkuste sem nebo na můj e-mail poslat kód.

    Havetta

  • 23. června 2010 11:29
     
     
    Generuji SHP vrstvy ze SharpMap(u) a do toho vykresluji legendu pomocí objektu ze System.Drawing.Graphic. Problém jsem již vyřešil použitím zvláštního vlákna které je spuštěno zvlášť jen pro samotné generování. Přesto děkuji za odpověď a snahu pomoci.
  • 24. června 2010 6:01
     
     Odpovědět Obsahuje kód

    Ahoj, pokud už je to vyřešený, je to OK, zkoušel jsem popisovaný chování na kódu dole a pokud jsem nezapomněl na Dispose, vše se uvolňovalo správně. Není možné, že by během práce zůstal v paměti jiný objekt odkazující na Bitmapu ?

    int i = int.Parse(textBox1.Text);
    for (int a = 0; a < i; a++)
    {
     Bitmap b = new Bitmap(1280, 1024);
     Graphics g = Graphics.FromImage(b);
            
     g.DrawLine(Pens.Blue, 0, 0, g.ClipBounds.Width, g.ClipBounds.Height);
     g.Flush();
     //g.Dispose();
     //b.Dispose();
    }
    label1.Text = "Working set: " + Environment.WorkingSet;

    M
  • 24. června 2010 8:00
     
     

    Je to možné i když jsem to několikrát procházel. Celá ta metoda generování (mých) obrázku je samozřejmě složitější, je tam více cyklů, podmínky, volá další metody atd. Je dost pravděpodoné, že jsem někde něco přehlédl. Děkuji za ochotu.

    T.