WPF DataGrid ItemsSource 内存泄漏

Posted

技术标签:

【中文标题】WPF DataGrid ItemsSource 内存泄漏【英文标题】:WPF DataGrid ItemsSource memory leak 【发布时间】:2022-01-17 20:19:04 【问题描述】:

我不知道为什么,但是当我定义 DataGrid 的 ItemsSource 时,它​​会造成一些内存泄漏。

这是我的 DataGrid 的 xaml 代码:

<DataGrid x:Name="DataGrid1" AutoGenerateColumns="True" IsReadOnly="True" ClipboardCopyMode="ExcludeHeader" Margin="20,250,20,20" SelectionUnit="Cell" Style="DynamicResource MaterialDesignDataGrid" SelectionMode="Single"/>

这是我定义 ItemsSource 的代码:

cmd = New SqlCommand With 
    .CommandText = strsql,
    .Connection = DBConn.ADONETconn
    
da = New SqlDataAdapter(cmd)
dt = New DataTable("RECH")
da.Fill(dt)
DataGrid1.ItemsSource = dt.DefaultView

正如您从诊断工具中看到的,我在某处发生了一些内存泄漏。

我知道这是由DataGrid1.ItemsSource = dt.DefaultView 行引起的,因为如果我评论它,就不会发生内存泄漏。

我已经下载了 JetBrains dotMemory 来看看发生了什么。 正如您在下面看到的,它告诉我它是由 DataGridRow 引起的。

我不明白为什么会这样。数据表中的数据是正确的。

如果你有任何线索,请与我分享

【问题讨论】:

您能追踪保留路径吗? JetBrains Profiler 可以做到这一点。 调用树帮助我找到了问题。谢谢。 看起来DataView 有一个 Dispose 方法。 【参考方案1】:

找到了!实际上它来自我的 DataGrid 在 StackPanel 中的事实。我仍然不知道为什么,但这是个问题。

【讨论】:

以上是关于WPF DataGrid ItemsSource 内存泄漏的主要内容,如果未能解决你的问题,请参考以下文章

wpf中,当DataGrid.ItemsSource与ObservableCollection绑定后,值变化时,DataGrid如何刷新?

WPF DataGrid如何获取ItemsSource更新时

在 WPF DataGrid 中绑定 ComboBoxColumn 的 ItemsSource

WPF DataGrid - 从 DataGrid ItemsSource 对象的集合值中设置唯一的每行(对象)组合框值

在XAML代码中绑定数据时,WPF DataGrid ItemsSource绑定不显示数据

WPF 在使用 ItemsSource 之前,项集合必须为空