应用:
- WPF 应用程序由顶部的文本框和下方的列表框组成
- 用户在TextBox中输入字符串查找员工,搜索结果显示在ListBox中
- ListBox 使用 DataTemplates 来显示元素(显示员工姓名、部门、电话和缩略图。)
执行:
- 在应用程序启动时,我查询数据库并检索要显示在 ListBox 中的所有员工和相关信息。这一直保存在内存中。
- 应用程序启动后,所有可搜索的数据都在内存中,搜索几乎是即时的。所有搜索都在内存中的数据上执行。
- 搜索结果使用 DataTemplates 显示在 ListBox 中。缩略图、姓名、电话、部门等显示在每个 ListBox 项中。
问题:
- 启动时内存使用量约为 200MB。
- 随着列表框中的数据发生变化,无论是通过新搜索还是简单地向下滚动列表框,内存消耗都会增加。
- 当用户缓慢向下滚动列表框时,内存增加得更快。当您上下滚动时,内存迅速达到 1GB。
没有手动创建控件的代码 - 一切都是通过数据绑定完成的。
为什么我会看到这种行为?我能做些什么来修复它?请帮忙!
更新:我发现问题不是内存泄漏。这里的问题是列表框正在创建对象以显示员工的图像,并且在列表框项离开窗口后没有为垃圾收集器释放。CleanUpVirtualizedItem 事件如我所料发生,但内存仍未释放。有任何想法吗?