我想处理一个我正在动态添加到我的应用程序的控件。垃圾收集器在从其父控件.Remove()
之后没有拾取对象,并且它具有巨大的位图和几何私有成员。
我希望能够做到这样的事情:
foreach (ScrollItem mylabel in canvas1.Children)
{
if (mylabel.bRemove == true)
{
canvas1.Children.Remove(mylabel);
mylabel = null; // or mylabel.Dispose();
}
}
canvas1
在UIObjectCollection
中不能包含空项,因此我无法将其设置为null,如果我只是Remove()
,则垃圾收集器不会收集它。
我尝试过这样的事情:
myobj = mylabel;
canvas1.Children.Remove(mylabel);
myobj = null;
但这也不起作用。
答案 0 :(得分:4)
只要没有对您的对象的引用,GC就会收集它。检查您的应用是否有对您的对象的任何其他引用。这通常可以是事件订阅者。您可能也想使用.NET内存分析器,看看是什么阻止了您的对象使用GC。