Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Разработка Windows Forms > Обойтись без GC.collect


Автор: N1ko 27.7.2010, 10:14
Здравствуйте. Как можно в подобном случае обойтись без GC.Сollect? Если его не ставить идёт постоянная утечка дескрипторов.
 
Код

 public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            backgroundWorker1.RunWorkerAsync();
        }

        private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
        {
            for (int i = 0; i < 10000; i++)
            {
                treeView1.Invoke(new AddNodeName(treeView1.Nodes.Add), "Hello");
                Thread.Sleep(200);
                GC.WaitForPendingFinalizers();
                GC.Collect();
            }
        }
        delegate object AddNodeName(string PrmName);
    }

Автор: jonie 27.7.2010, 14:56
N1ko, постоянной быть не может - винда срубит ваше приложение. Думаю просто GC не вызывает чистку (не успевает), но когда дескрипторов будет не хватать, то вызовет...

Автор: ДобренькийПапаша 8.8.2010, 06:31
А почему в коде GC.Collect() идёт после GC.WaitForPendingFinalizers()?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)