Dispose и DevExpress
От: ShchurovI  
Дата: 12.02.07 10:53
Оценка:
Проблема с удалением компонент DevExpress.
Если на форме есть хоть один компонент DevExpress, то при закрытии формы, она не удаляется сборщиком мусора GC.
Данная проблема не возникает, если DevExpress'овские компоненты заменить на стандартные!

При вызове

(new FormSample()).ShowDialog();
GC.Collect();

форма FormSample остается в памяти.
Re: Dispose и DevExpress
От: SerkMan  
Дата: 12.02.07 13:36
Оценка:
Здравствуйте, ShchurovI, Вы писали:

using(new FormSample()).ShowDialog())
{
    // TODO:
}
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[2]: Dispose и DevExpress
От: SerkMan  
Дата: 12.02.07 13:39
Оценка:
Здравствуйте, SerkMan, Вы писали:

SM>Здравствуйте, ShchurovI, Вы писали:


Извеняюсь поспешил.
using(FormSample sampleForm = new FormSample())
{
    sampleForm.ShowDialog()
}
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re: Dispose и DevExpress
От: SerkMan  
Дата: 12.02.07 13:55
Оценка:
Здравствуйте, ShchurovI, Вы писали:

Могу объяснить почему зависают контролы.

Контролы имещие в родителях класс PopupBaseEdit, для отображения всплывающей части используют формы,
Форма при создании добавляется в колекцию форм чтобы GC не собрал их.
Когда форма отображается модально, при закрытии ей не говорится Dispose (это нужно сделать ручками), следовательно,
у контролов принадлежащих данной форме, также Dispose не будет вызван, а все контролы от PopupBaseEdit содержат ссылку на
форму PopupFormBase (а она также имеет обратную ссылку). В итоге эта форма остается в коллекции форм, и ее GC не может собрать,
А эта форма содержит ссылки на контролы.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[3]: Dispose и DevExpress
От: Аноним  
Дата: 12.02.07 14:29
Оценка:
Здравствуйте, SerkMan, Вы писали:

SM>using(FormSample sampleForm = new FormSample())

SM>{
SM> sampleForm.ShowDialog()
SM>}
SM>[/c#]


Проблему не решило. Форма остается в памяти.
Re[4]: Dispose и DevExpress
От: SerkMan  
Дата: 12.02.07 15:01
Оценка:
Здравствуйте, <Аноним>, Вы писали:

А>Здравствуйте, SerkMan, Вы писали:


А>Проблему не решило. Форма остается в памяти.


Посмотри подписку\отписку от событий.

Нам данный метод помог.

И в догонку.

(new FormSample()).ShowDialog();
GC.Collect();

Выделенное нужно записывать так:
GC.Collect();
GC.WaitForPendingFinalizers();
GC.Collect();
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.