NOVINKA - Online rekvalifikační kurz Java programátor. Oblíbená a studenty ověřená rekvalifikace - nyní i online.
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!
Avatar
Peter Janičina:13.10.2015 8:55

Zdravim, vedel by mi niekto poradit ako vyriesit memory leaks? Skusal som program BEAR, ked otvaram childform s stlacitkami v mdi tak mi rastie hlavne pocet Fontov, skusal som v dispose to zrusit priradit null aj bool DeleteObject(IntPtr hObject), ale vyzrera ze to tam ostava nadalej podla cisla handle. Skusal som aj v OnPaint pouzivat using a ciastocne to pomohlo, Nemoze byt este problem v cycklickych referenciach, ze mi to nechce pustit, ak ano, cez co by sa to najlepsie hladalo? Diky

 
Odpovědět
13.10.2015 8:55
Avatar
Milan Křepelka
Tvůrce
Avatar
Milan Křepelka:13.10.2015 12:21

Collector nemusí uvolnit ty fonty okamžitě. To je na něm kdy to slízne. Zkus ho pošťouchnout GC.Collect()! Jen to prosím vás lidi nepoužívejte ve svých aplikacích. Případně zvol lepší nástroj.
http://memprofiler.com/

 
Nahoru Odpovědět
13.10.2015 12:21
Avatar
Peter Janičina:22.10.2015 14:17

Skusal som jednoduchy priklad, asi robim nieco zle

using System;
using System.Windows.Forms;

namespace MemoryLeaks
{
    public partial class Form1 : Form
    {
        private Form f = null;
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            f = new Form();
            for (int i = 0; i<3000; i++)
            {
                f.Controls.Add(new Button());
            }
            f.FormClosed += new FormClosedEventHandler(f_FormClosed);
            f.ShowDialog();
        }

        private void f_FormClosed(object sender, FormClosedEventArgs e)
        {
            base.OnClosed(e);
            //foreach (Control c in f.Controls)
            //{
            //    f.Controls.Remove(c);

            //}
            f.Controls.Clear();
            f.Dispose();
            //f.Parent = null;
            //f = null;
            GC.Collect();
        }
    }
}
 
Nahoru Odpovědět
22.10.2015 14:17
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 3 zpráv z 3.