首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在WPF VirtualizingStackPanel中滚动时出现内存泄漏

在WPF VirtualizingStackPanel中滚动时出现内存泄漏
EN

Stack Overflow用户
提问于 2015-03-18 18:12:13
回答 1查看 779关注 0票数 3

我使用的是VirtualizingStackPanel和textBlock,我的XAML代码如下所示。

代码语言:javascript
复制
<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中,我有以下代码,

代码语言:javascript
复制
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 Performance and Diagnostics跟踪泄漏。这就是我在托管堆中看到的内容

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

代码语言:javascript
复制
VirtualizingStackPanel.VirtualizationMode="Recycling"
EN

回答 1

Stack Overflow用户

发布于 2015-07-29 04:20:12

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

代码语言:javascript
复制
<ItemsControl Name="NameItemsControl"
VirtualizingStackPanel.VirtualizationMode="Recycling"
ScrollViewer.CanContentScroll="True"
ItemsSource="{Binding Path=NameList}">
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29119220

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档