gpt4 book ai didi

wpf - 在 WPF VirtualizingStackPanel 中滚动时内存泄漏

转载 作者:行者123 更新时间:2023-12-04 18:04:46 26 4
gpt4 key购买 nike

我正在使用 VirtualizingStackPanel 和 textBlock,我的 XAML 代码如下所示,

<Grid>
<ItemsControl Name="NameItemsControl"
VirtualizingStackPanel.IsVirtualizing="True"
ScrollViewer.CanContentScroll="True"
ItemsSource="{Binding Path=NameList}">

<ItemsControl.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Path=TaskName}" />
</DataTemplate>
</ItemsControl.ItemTemplate>
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<VirtualizingStackPanel />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.Template>
<ControlTemplate>
<Border>
<ScrollViewer>
<ItemsPresenter />
</ScrollViewer>
</Border>
</ControlTemplate>
</ItemsControl.Template>
</ItemsControl>
</Grid>

在 .cs 中我有以下代码,

public partial class MainWindow : Window
{
private List<Task> Tasks;
public MainWindow()
{
InitializeComponent();
Tasks = new List<Task>();

for (int i = 1; i < 1000; i++)
{
Task task = new Task() { TaskName = "Task " + i, Id = i, Size = 20 };

Tasks.Add(task);
}
NameItemsControl.ItemsSource = Tasks;
}
}
public class Task
{
public string TaskName { get; set; }
public int Id { get; set; }
public int Size { get; set; }
}

滚动时我可以看到内存泄漏,我正在使用 VS 2013 性能和诊断来跟踪泄漏。这是我在托管堆中看到的 enter image description here

显示ConditionalWeakTable<Object,Object>滚动时计数在增加。有什么办法可以解决这个问题吗?出于某种原因,我不想设置

VirtualizingStackPanel.VirtualizationMode="Recycling"

最佳答案

ItemsControl 上设置 VirtualizingStackPanel.VirtualizationMode="Recycling" 以避免内存泄漏。我在这种情况下遇到了同样的问题,设置 VirtualizingStackPanel.VirtualizationMode="Recycling" 解决了这个问题。

<ItemsControl Name="NameItemsControl"
VirtualizingStackPanel.VirtualizationMode="Recycling"
ScrollViewer.CanContentScroll="True"
ItemsSource="{Binding Path=NameList}">

关于wpf - 在 WPF VirtualizingStackPanel 中滚动时内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29119220/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com