我有多次创建用户控件的情况。
<ItemsControl ItemsSource="{Binding ItmCollection, Mode=TwoWay}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<local:UserDefinedControl />
</DataTemplate>
</ItemsControl.ItemTemplate>
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<Grid local:GridHelpers.RowCount="{Binding RowCount,Mode=TwoWay}"
local:GridHelpers.ColumnCount="{Binding ColumnCount, Mode=TwoWay}" />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemContainerStyle>
<Style>
<Setter Property="Grid.Row" Value="{Binding Y_AXIS}" />
<Setter Property="Grid.Column" Value="{Binding X_AXIS}" />
</Style>
</ItemsControl.ItemContainerStyle>
</ItemsControl>
通常userdefinedcontrol
(用户控件名称)被创建10
次,并占用15MB
的内存。标签项中的itemscontrol
和我有2个按钮,即第一个按钮用于创建UI ItmCollection
(绑定ItemsSource
),第二个按钮正在破坏ItmCollection
(ItemsSource
绑定)。
现在,模型对象集合可以通过IDisposable
正确地销毁,但是UI对象空间仍然相同,并且每次都会不断添加。如果我看到任务管理器,请继续增加内存空间。虽然我尝试使用析构函数和卸载事件,但对内存部分没有影响。基本上存在内存泄漏问题。
请帮助处置UI对象。
已回答的问题:
我找到了这个问题的根本原因之一。
因为我有用户控制权。在usercontrol内部,我有一个按钮,我绑定为
Tooltip =“ {Binding DataContext.ChildCollection [0] .ToolTipDesc,RelativeSource =” {RelativeSource AncestorType = {x:Type UserControl}}}“”
和按钮绑定对于我的情况是必需的。因此,第一次加载用户控件时会发生什么情况,那时子集合为空,而clr给我ArgumentOutOfRangeException。我尝试了不起作用的TargetNullValue和FallbackValue。所以我正在寻找替代方案。