【发布时间】:2010-12-28 20:21:17
【问题描述】:
我正在尝试弄清楚这个虚拟化功能,我不确定我是否理解错了或者发生了什么,但我正在使用 ANTS 内存分析器来检查虚拟化 TreeView 中的项目数,而且还在不断增加。我有一个包含 1,001 个项目(1 个根、1000 个子项目)的 TreeView,而且我总是得到多达 1,001 个 TreeViewItems、1,001 个 ToggleButtons 和 1,001 个 TextBlocks。虚拟化不应该重复使用这些项目吗?如果是这样,为什么我每个都有 1,001 个?此外,CleanUpVirtualizedItem 永远不会触发。
如果我理解错了,以及您是否有关于如何使用它的资源,请告诉我。我在互联网上搜索过,但没有找到任何有用的东西。
编辑:
甚至树使用的内存也是从 aporx 增长而来的。展开并滚动浏览所有项目时为 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)
{
}
}
【问题讨论】:
标签: wpf virtualization