WPF内存使用情况

Gus*_*nti 9 wpf performance memory-management listbox datatemplate

应用:

  • WPF应用程序由顶部的文本框和下面的列表框组成
  • 用户在TextBox中键入字符串以查找员工,搜索结果显示在ListBox中
  • ListBox使用DataTemplates显示元素(显示员工姓名,部门,电话和缩略图.)

执行:

  • 在应用程序启动时,我查询数据库并检索要在ListBox中显示的所有员工和相关信息.这一直保存在内存中.
  • 应用程序启动后,所有可搜索的数据都在内存中,搜索几乎是即时的.所有搜索都在内存中的数据上执行.
  • 搜索结果使用DataTemplates显示在ListBox中.缩略图图片,名称,电话,部门等显示在每个ListBox项目中.

问题:

  • 启动时,内存使用量约为200MB.
  • 随着列表框中的数据更改,无论是通过新搜索还是简单地向下滚动列表框,内存消耗都会增加.
  • 当用户慢慢向下滚动列表框时,内存增加得更快.当你上下滚动时,内存很快会达到1GB.

没有代码手动创建控件 - 一切都是通过数据绑定完成的.

为什么我看到这种行为?我该怎么办才能修复它?请帮忙!

更新:我发现问题不是内存泄漏.这里的问题是列表框正在创建对象以显示员工的图像,并且在listboxitem离开窗口后不会为垃圾收集器发布.CleanUpVirtualizedItem事件按我的预期发生,但内存仍未释放.有任何想法吗?

Noe*_*edy 6

冒着油腻的风险,你有内存泄漏.为什么不尝试像ANTS*这样的工具来追踪它.他们有免费试用,我从来没有使用它,但它有良好的声誉.

*其他分析工具可用.

如果您不想使用其他工具,可以尝试在每次创建类时增加静态成员,并在每次处理实例时递减它.这将帮助您跟踪未正确销毁的实例.