我正在尝试理解虚拟化功能,但我不确定是否理解有误或出了什么问题。我使用ANTS内存分析工具检查虚拟树视图中的项数,但它一直在增加。我有一个包含1,001个项(1个根,1000个子项)的树视图,但我总是得到1,001个TreeViewItems、1,001个ToggleButtons和1,001个TextBlocks。虚拟化不应该重复使用这些项吗?如果是这样,为什么会有1,001个每种项?此外,CleanUpVirtualizedItem从未触发。
如果我理解错误,请告诉我,并提供如何使用的资源。我已经在互联网上搜索过,但没有找到有用的内容。
编辑:
即使我展开并滚动所有项,树使用的内存也从大约4MB增长到12MB。
谢谢您告知我。
这是我的代码。
XAML:
<Window x:Class="RadTreeViewExpandedProblem.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Window1" Height="300" Width="300">
<Grid>
<TreeView x:Name="treeView"
VirtualizingStackPanel.IsVirtualizing="True"
VirtualizingStackPanel.CleanUpVirtualizedItem="TreeView_CleanUpVirtualizedItem">
<TreeView.ItemsPanel>
<ItemsPanelTemplate>
<VirtualizingStackPanel />
</ItemsPanelTemplate>
</TreeView.ItemsPanel>
</TreeView>
</Grid>
</Window>
C#:
public partial class Window1 : Window
{
public Window1()
{
InitializeComponent();
TreeViewItem rootItem = new TreeViewItem() { Header = "Item Level 0" };
for (int i = 0; i < 1000; i++)
{
TreeViewItem itemLevel1 = new TreeViewItem() { Header = "Item Level 1" };
itemLevel1.Items.Add(new TreeViewItem());
rootItem.Items.Add(itemLevel1);
}
treeView.Items.Add(rootItem);
}
private void TreeView_CleanUpVirtualizedItem(object sender, CleanUpVirtualizedItemEventArgs e)
{
}
}