Diskuze: Memory leaks

C# .NET .NET (C# a Visual Basic) Memory leaks American English version English version

Avatar
Peter Janičina:

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
Redaktor
Avatar
Milan Křepelka:

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:

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.