2012-01-19 13 views
0

Я новичок в WPF и разрабатываю несколько пользовательских элементов управления. Я всегда сталкивался с утечками памяти в своем пользовательском контроле. Мой элемент управления не был удален из памяти, даже если он был удален из Visual Tree.Пользовательский контроль с утечкой памяти

Есть ли какой-либо дизайн, который нам нужно для создания пользовательского элемента управления без утечки памяти в WPF?

Или мы можем использовать IDisposable для этого? Но в этом случае метод Dispose() не вызывает неявно. Кажется, .net Frameowrk buil в WPF-элементах управления, таких как Button, TextBox не IDisposable. Но они не утечка памяти.

Любые быстрые советы действительно оценены.

Спасибо заранее,

Джавахар

+0

RE 'IDisposable' реализация; 'Dispose()' неявно не вызывается, вам нужно называть его самостоятельно. Утечки памяти RE; вы уверены, что удалили все ссылки на свой 'UserControl' (включая обработчики событий)? Если нет, сборщик мусора, возможно, не счел его готовым к уборке. Кроме того, можете ли вы опубликовать какой-либо код, чтобы предоставить образец вашей проблемы? –

+0

@WPF Lover Как вы знаете, что ваш контроль все еще находится в памяти? –

+0

@Dimitry: Я профилирую с красными воротами ANTS –

ответ

0

Компонент, который имеет зафиксированное событие, например, Loaded, не будет выгружен, пока все события не регистрируются. Всегда помните, чтобы отменить регистрацию событий, когда они вам больше не нужны.

Возможно, это также относится к потоку, который все еще работает.

+0

Спасибо, могу я знать, что это подходящее место, чтобы отменить регистрацию событий. Можем ли мы использовать Unloaded event? Но мы не можем ожидать, что Unloaded будет вызываться только тогда, когда экземпляр собирается Dispose(). Conisder моего пользовательского элемента управления находится в элементе табуляции. –

Смежные вопросы