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:29Generuji 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
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- Označen jako odpověď KFL-MSMicrosoft Employee, Owner 28. dubna 2011 14:08
-
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.