TabControl.Items.Remove (TabItem) не освобождает память, используемую TabItem - PullRequest
2 голосов
/ 02 июля 2010

У меня есть приложение WPF, где при закрытии TabItem с TabControl с использованием TabControl.Items.Remove(TabItem) не освобождается память, используемая TabItem . Это просто делает TabItem невидимым и TabItem объект все еще остается в памяти. Есть ли способ удалить этот TabItem объект из памяти? Любая помощь будет оценена.

Ответы [ 2 ]

3 голосов
/ 02 августа 2010

Насколько я знаю, все обработчики событий должны быть "отсоединены", также вы должны освободить все привязки на вашем tabItem.

Также Если я не ошибаюсь CommandBindings, KeyGestures также может вызвать утечку.

Попробуйте использовать CLR Profiler.Это сэкономило мне много часов много раз, хотя я не использовал его с WPF.Но я почти уверен, что справится.

1 голос
/ 03 июля 2010

Вам нужно полностью вырезать объект из его родителя, чтобы он мог быть собран мусором.Это означает также и события (- = бла).

Даже после этого объект может оставаться в памяти до следующего сканирования GC.

Вы можете вызвать вызов GCно это не рекомендуется.http://msdn.microsoft.com/en-us/library/system.gc.aspx

...